From 76fa2f756b5472cab895d82bdde4916bab9d8690 Mon Sep 17 00:00:00 2001 From: Divyendu Singh Date: Tue, 2 Sep 2025 11:17:09 +0200 Subject: [PATCH 01/10] stream: docs for xata clone stream --- docs/cli/clone.mdx | 27 +++++++++++++++++++++++++++ docs/cli/stream.mdx | 28 ++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 docs/cli/stream.mdx diff --git a/docs/cli/clone.mdx b/docs/cli/clone.mdx index 52137c4..a5299ab 100644 --- a/docs/cli/clone.mdx +++ b/docs/cli/clone.mdx @@ -49,6 +49,33 @@ xata clone config [--source-url ] [--mode ] [--validation-mode - `--branch`: Branch ID (default: "") - `-h, --help`: Print help information and exit +### stream + +Start a continuous data stream from the configured source to the configured target. + +```bash +xata clone stream --source-url [--config ] [--log-level ] [--init] [--profile] [--replication-slot ] [--reset] [--snapshot-tables ] [--source ] [--target ] [--target-url ] [--organization ] [--project ] [--branch ] [--filter-tables ] [--validation-mode ] [--role ] [-h|--help] +``` + +- `--source-url`: The source URL of the database to stream from (required) +- `--config`: .env or .yaml config file to use with pgstream if any +- `--log-level`: Log level for pgstream (trace|debug|info|warn|error|fatal|panic, default: info) +- `--init`: Whether to initialize pgstream before starting replication +- `--profile`: Whether to expose a /debug/pprof endpoint on localhost:6060 +- `--replication-slot`: Name of the postgres replication slot for pgstream to connect to +- `--reset`: Whether to reset the target before snapshotting (only for postgres target) +- `--snapshot-tables`: List of tables to snapshot if initial snapshot is required, in the format `.`. If not specified, the schema `public` will be assumed. Wildcards are supported +- `--source`: Source type. One of postgres, kafka +- `--target`: Target type. One of postgres, opensearch, elasticsearch, kafka +- `--target-url`: Target URL +- `--organization`: Organization ID +- `--project`: Project ID +- `--branch`: Branch ID +- `--filter-tables`: Tables to filter (default: *.*) +- `--validation-mode`: Anonymization validation mode, strict implies that all tables and columns should be specified (strict|relaxed|prompt, default: prompt) +- `--role`: Postgres role to use for streaming +- `-h, --help`: Print help information and exit + ## Global Flags - `-h, --help` - Print help information and exit diff --git a/docs/cli/stream.mdx b/docs/cli/stream.mdx new file mode 100644 index 0000000..8453d38 --- /dev/null +++ b/docs/cli/stream.mdx @@ -0,0 +1,28 @@ +--- +title: Stream Command +description: Commands for managing database streaming operations +--- + +The `stream` command helps you manage database streaming operations, including destroying pgstream setups. + +## Subcommands + +### destroy + +Destroy any pgstream setup, removing the replication slot and all the relevant tables/functions/triggers, along with the internal pgstream schema. + +```bash +xata stream destroy --source-url [--config ] [--log-level ] [--postgres-url ] [--replication-slot ] [-h|--help] +``` + +- `--source-url`: The source URL of the database to clone (required) +- `--config`: .env or .yaml config file to use with pgstream if any +- `--log-level`: Log level for pgstream (trace|debug|info|warn|error|fatal|panic, default: info) +- `--postgres-url`: Source postgres URL where pgstream destroy will be run +- `--replication-slot`: Name of the postgres replication slot to be deleted by pgstream from the source url +- `-h, --help`: Print help information and exit + +## Global Flags + +- `-h, --help` - Print help information and exit +- `--json` - Output in JSON format \ No newline at end of file From 1f0f2ff67e6b49cc5831ad9bd62052198e8d7f7a Mon Sep 17 00:00:00 2001 From: Divyendu Singh Date: Tue, 2 Sep 2025 11:20:14 +0200 Subject: [PATCH 02/10] stream: docs for xata clone stream --- docs/config.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/config.json b/docs/config.json index b6fe2e8..1fdb5ac 100644 --- a/docs/config.json +++ b/docs/config.json @@ -288,6 +288,11 @@ "href": "/cli/status", "file": "docs/cli/status.mdx" }, + { + "title": "stream", + "href": "/cli/stream", + "file": "docs/cli/stream.mdx" + }, { "title": "upgrade", "href": "/cli/upgrade", From 3eedce6ebd881f0550f426b0cc68fde368f0514c Mon Sep 17 00:00:00 2001 From: Divyendu Singh Date: Tue, 2 Sep 2025 11:47:20 +0200 Subject: [PATCH 03/10] add streaming replication tutorial --- docs/config.json | 5 + docs/tutorials/streaming-replication.mdx | 190 +++++++++++++++++++++++ 2 files changed, 195 insertions(+) create mode 100644 docs/tutorials/streaming-replication.mdx diff --git a/docs/config.json b/docs/config.json index 1fdb5ac..1348f78 100644 --- a/docs/config.json +++ b/docs/config.json @@ -52,6 +52,11 @@ "href": "/tutorials/create-staging-replica", "file": "docs/tutorials/create-staging-replica.mdx" }, + { + "title": "Set up streaming replication", + "href": "/tutorials/streaming-replication", + "file": "docs/tutorials/streaming-replication.mdx" + }, { "title": "Schema changes", "href": "/tutorials/schema-change", diff --git a/docs/tutorials/streaming-replication.mdx b/docs/tutorials/streaming-replication.mdx new file mode 100644 index 0000000..421a6ce --- /dev/null +++ b/docs/tutorials/streaming-replication.mdx @@ -0,0 +1,190 @@ +--- +title: Set up streaming replication +description: Use Xata's streaming replication to keep your database continuously synchronized with real-time changes. +--- + +This guide shows you how to set up continuous streaming replication from your production PostgreSQL database to Xata, enabling real-time data synchronization with optional anonymization. + +![Setting up streaming replication to Xata](assets/images/xata-streaming-replication.png) + +## 1. Prerequisites + +- A Xata account ([sign up here](https://console.xata.io)) +- The [Xata CLI](/cli) installed: + ```bash + curl -fsSL https://xata.io/install.sh | bash + ``` +- A PostgreSQL database with: + - Logical replication enabled + - A dedicated replication slot (or permissions to create one) + - Network connectivity from Xata to your database + +## 2. Enable logical replication on source database + +First, ensure your source PostgreSQL database has logical replication enabled. You'll need to set these parameters: + +```sql +-- Check current settings +SHOW wal_level; +SHOW max_replication_slots; +SHOW max_wal_senders; +``` + +If not already configured, update your PostgreSQL configuration: + +```sql +ALTER SYSTEM SET wal_level = logical; +ALTER SYSTEM SET max_replication_slots = 10; +ALTER SYSTEM SET max_wal_senders = 10; +``` + +Restart your PostgreSQL instance for the changes to take effect. + +## 3. Create a Xata project and branch + +In the Console, create a new project and then click the **Create main branch** button to create the PostgreSQL instance. + +For streaming replication, consider using at least 1 replica to ensure high availability during continuous synchronization. Select an instance size that can handle your expected write throughput. + +> **Note:** Streaming replication maintains a persistent connection to your source database. Ensure your network allows stable, long-lived connections between Xata and your PostgreSQL instance. + +## 4. Configure the Xata CLI + +Authenticate the CLI by running: + +```sh +xata auth login +``` + +Initialize the project by running: + +```sh +xata init +``` + +Select the project and branch you created in the previous step. This will create a `.xata` folder with configuration files. + +## 5. Create a replication slot + +Create a dedicated replication slot on your source database: + +```sql +SELECT pg_create_logical_replication_slot('xata_replication', 'pgoutput'); +``` + +This slot will track changes in your database for streaming to Xata. + +## 6. Configure streaming replication + +Generate a configuration for the streaming process: + +```bash +xata clone config --source-url $CONN_STRING --mode=prompt +``` + +Where `CONN_STRING` is your PostgreSQL connection string with replication permissions. + +The configuration prompt will ask you to: +- Select tables to replicate +- Configure anonymization rules if needed +- Set up transformation pipelines + +This creates a configuration file at `.xata/clone.yaml` that you can further customize. + +## 7. Initialize and start streaming + +First, initialize the streaming setup with an optional initial snapshot: + +```bash +xata clone stream --source-url $CONN_STRING \ + --init \ + --replication-slot xata_replication \ + --snapshot-tables "public.*" +``` + +This command will: +- Create an initial snapshot of your specified tables +- Set up the streaming pipeline +- Begin continuous replication + +For production deployments, you can run the stream command without `--init` if you've already performed an initial snapshot: + +```bash +xata clone stream --source-url $CONN_STRING \ + --replication-slot xata_replication +``` + +## 8. Monitor streaming status + +The streaming process runs continuously, keeping your Xata database synchronized with changes from the source. Monitor the streaming status by checking the logs: + +```bash +xata clone stream --source-url $CONN_STRING \ + --replication-slot xata_replication \ + --log-level debug +``` + +## 9. Advanced configuration + +### Filtering specific tables + +To stream only specific tables, use the `--filter-tables` flag: + +```bash +xata clone stream --source-url $CONN_STRING \ + --replication-slot xata_replication \ + --filter-tables "users.*,orders.*,products.*" +``` + +### Custom transformations + +Edit your `.xata/clone.yaml` file to add custom transformations: + +```yaml +transforms: + - table: users + columns: + - name: email + transformer: mask_email + - name: phone + transformer: redact + - table: orders + columns: + - name: credit_card + transformer: mask_credit_card +``` + +### Running with Docker + +For production deployments, consider running the streaming process in a containerized environment: + +```bash +docker run -d \ + --name xata-stream \ + --restart unless-stopped \ + -v $(pwd)/.xata:/config \ + xata/cli clone stream \ + --source-url $CONN_STRING \ + --config /config/clone.yaml \ + --replication-slot xata_replication +``` + +## 10. Handling failures and recovery + +If the streaming connection is interrupted, the replication slot ensures no data is lost. Simply restart the streaming command: + +```bash +xata clone stream --source-url $CONN_STRING \ + --replication-slot xata_replication +``` + +The process will resume from where it left off, catching up with any changes that occurred during the downtime. + +## Summary + +- You now have real-time streaming replication from your PostgreSQL database to Xata +- Changes in your source database are automatically synchronized +- Your data can be anonymized in transit using configurable transformers +- The replication slot ensures no data loss during network interruptions + +For more details on advanced streaming configurations and monitoring, see the [clone command documentation](/cli/clone). \ No newline at end of file From c2cc02733c0fbddd6ef875d103c3c7cd48be0012 Mon Sep 17 00:00:00 2001 From: Divyendu Singh Date: Tue, 2 Sep 2025 11:47:53 +0200 Subject: [PATCH 04/10] docs feedback --- docs/cli/clone.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/cli/clone.mdx b/docs/cli/clone.mdx index a5299ab..1350c22 100644 --- a/docs/cli/clone.mdx +++ b/docs/cli/clone.mdx @@ -9,7 +9,7 @@ The `clone` command helps you create a copy of your Xata database or clone an ex ### start -Snapshot performs a snapshot of the configured source Postgres database into the configured target. +Start performs a snapshot of the configured source Postgres database into the configured target. ```bash xata clone start [--source-url ] [--config ] [--log-level ] [--dump-file ] [--postgres-url ] [--profile] [--reset] [--tables ] [--target ] [--target-url ] [--organization ] [--project ] [--branch ] [--filter-tables ] [--validation-mode ] [--role ] [-h|--help] @@ -35,7 +35,7 @@ xata clone start [--source-url ] [--config ] [--log-level ] [- ### config -Automatically configure the transforms for the clone command. +Automatically configure the transformations for the clone command. ```bash xata clone config [--source-url ] [--mode ] [--validation-mode ] [--organization ] [--project ] [--branch ] [-h|--help] @@ -71,7 +71,7 @@ xata clone stream --source-url [--config ] [--log-level ] [-- - `--organization`: Organization ID - `--project`: Project ID - `--branch`: Branch ID -- `--filter-tables`: Tables to filter (default: *.*) +- `--filter-tables`: Tables to filter (default: _._) - `--validation-mode`: Anonymization validation mode, strict implies that all tables and columns should be specified (strict|relaxed|prompt, default: prompt) - `--role`: Postgres role to use for streaming - `-h, --help`: Print help information and exit From 533e3b72c4bc5182f9100fba825e46169a20ae54 Mon Sep 17 00:00:00 2001 From: Divyendu Singh Date: Tue, 2 Sep 2025 11:51:51 +0200 Subject: [PATCH 05/10] add streaming replication tutorial --- docs/tutorials/streaming-replication.mdx | 54 +++++------------------- 1 file changed, 10 insertions(+), 44 deletions(-) diff --git a/docs/tutorials/streaming-replication.mdx b/docs/tutorials/streaming-replication.mdx index 421a6ce..da137df 100644 --- a/docs/tutorials/streaming-replication.mdx +++ b/docs/tutorials/streaming-replication.mdx @@ -62,69 +62,39 @@ Initialize the project by running: xata init ``` -Select the project and branch you created in the previous step. This will create a `.xata` folder with configuration files. - -## 5. Create a replication slot - -Create a dedicated replication slot on your source database: - -```sql -SELECT pg_create_logical_replication_slot('xata_replication', 'pgoutput'); -``` - -This slot will track changes in your database for streaming to Xata. - -## 6. Configure streaming replication +## 5. Configure streaming replication Generate a configuration for the streaming process: ```bash -xata clone config --source-url $CONN_STRING --mode=prompt +xata clone config --source-url $CONN_STRING ``` Where `CONN_STRING` is your PostgreSQL connection string with replication permissions. The configuration prompt will ask you to: + - Select tables to replicate - Configure anonymization rules if needed - Set up transformation pipelines This creates a configuration file at `.xata/clone.yaml` that you can further customize. -## 7. Initialize and start streaming +## 6. Initialize and start streaming First, initialize the streaming setup with an optional initial snapshot: ```bash -xata clone stream --source-url $CONN_STRING \ - --init \ - --replication-slot xata_replication \ - --snapshot-tables "public.*" +xata clone stream --source-url $CONN_STRING ``` This command will: + - Create an initial snapshot of your specified tables - Set up the streaming pipeline - Begin continuous replication -For production deployments, you can run the stream command without `--init` if you've already performed an initial snapshot: - -```bash -xata clone stream --source-url $CONN_STRING \ - --replication-slot xata_replication -``` - -## 8. Monitor streaming status - -The streaming process runs continuously, keeping your Xata database synchronized with changes from the source. Monitor the streaming status by checking the logs: - -```bash -xata clone stream --source-url $CONN_STRING \ - --replication-slot xata_replication \ - --log-level debug -``` - -## 9. Advanced configuration +## 7. Advanced configuration ### Filtering specific tables @@ -132,7 +102,6 @@ To stream only specific tables, use the `--filter-tables` flag: ```bash xata clone stream --source-url $CONN_STRING \ - --replication-slot xata_replication \ --filter-tables "users.*,orders.*,products.*" ``` @@ -164,9 +133,7 @@ docker run -d \ --restart unless-stopped \ -v $(pwd)/.xata:/config \ xata/cli clone stream \ - --source-url $CONN_STRING \ - --config /config/clone.yaml \ - --replication-slot xata_replication + --source-url $CONN_STRING ``` ## 10. Handling failures and recovery @@ -174,8 +141,7 @@ docker run -d \ If the streaming connection is interrupted, the replication slot ensures no data is lost. Simply restart the streaming command: ```bash -xata clone stream --source-url $CONN_STRING \ - --replication-slot xata_replication +xata clone stream --source-url $CONN_STRING ``` The process will resume from where it left off, catching up with any changes that occurred during the downtime. @@ -187,4 +153,4 @@ The process will resume from where it left off, catching up with any changes tha - Your data can be anonymized in transit using configurable transformers - The replication slot ensures no data loss during network interruptions -For more details on advanced streaming configurations and monitoring, see the [clone command documentation](/cli/clone). \ No newline at end of file +For more details on advanced streaming configurations and monitoring, see the [clone command documentation](/cli/clone). From 8f5e73edcfbf93a26f2d4488e010b25025dbda38 Mon Sep 17 00:00:00 2001 From: Divyendu Singh Date: Tue, 2 Sep 2025 17:48:33 +0200 Subject: [PATCH 06/10] feedback --- docs/cli/clone.mdx | 6 +++--- docs/cli/stream.mdx | 4 ++-- docs/tutorials/streaming-replication.mdx | 10 ++++++++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/docs/cli/clone.mdx b/docs/cli/clone.mdx index 1350c22..c0fb3a5 100644 --- a/docs/cli/clone.mdx +++ b/docs/cli/clone.mdx @@ -1,6 +1,6 @@ --- title: Clone Command -description: Command for cloning Xata databases and external PostgreSQL databases +description: "Commands for managing database streaming (logical replication) operations" --- The `clone` command helps you create a copy of your Xata database or clone an external PostgreSQL database into Xata. It supports data anonymization and advanced configuration for complex migration scenarios. @@ -51,7 +51,7 @@ xata clone config [--source-url ] [--mode ] [--validation-mode ### stream -Start a continuous data stream from the configured source to the configured target. +Start a continuous data stream from the configured source to the configured target using Postgres's logical replication. ```bash xata clone stream --source-url [--config ] [--log-level ] [--init] [--profile] [--replication-slot ] [--reset] [--snapshot-tables ] [--source ] [--target ] [--target-url ] [--organization ] [--project ] [--branch ] [--filter-tables ] [--validation-mode ] [--role ] [-h|--help] @@ -73,7 +73,7 @@ xata clone stream --source-url [--config ] [--log-level ] [-- - `--branch`: Branch ID - `--filter-tables`: Tables to filter (default: _._) - `--validation-mode`: Anonymization validation mode, strict implies that all tables and columns should be specified (strict|relaxed|prompt, default: prompt) -- `--role`: Postgres role to use for streaming +- `--role`: Postgres role to use for streaming (it should have atleast REPLICATION privilege) - `-h, --help`: Print help information and exit ## Global Flags diff --git a/docs/cli/stream.mdx b/docs/cli/stream.mdx index 8453d38..0aa1b28 100644 --- a/docs/cli/stream.mdx +++ b/docs/cli/stream.mdx @@ -3,7 +3,7 @@ title: Stream Command description: Commands for managing database streaming operations --- -The `stream` command helps you manage database streaming operations, including destroying pgstream setups. +The `stream` command helps you manage database streaming operations (using logical replication) using `pgstream`. ## Subcommands @@ -25,4 +25,4 @@ xata stream destroy --source-url [--config ] [--log-level ] [ ## Global Flags - `-h, --help` - Print help information and exit -- `--json` - Output in JSON format \ No newline at end of file +- `--json` - Output in JSON format diff --git a/docs/tutorials/streaming-replication.mdx b/docs/tutorials/streaming-replication.mdx index da137df..1454731 100644 --- a/docs/tutorials/streaming-replication.mdx +++ b/docs/tutorials/streaming-replication.mdx @@ -82,7 +82,7 @@ This creates a configuration file at `.xata/clone.yaml` that you can further cus ## 6. Initialize and start streaming -First, initialize the streaming setup with an optional initial snapshot: +First, initialize the streaming setup with an initial snapshot: ```bash xata clone stream --source-url $CONN_STRING @@ -146,9 +146,15 @@ xata clone stream --source-url $CONN_STRING The process will resume from where it left off, catching up with any changes that occurred during the downtime. +If you terminate the `xata clone stream` process and do not wish to run streaming replication again. Clean up the replication slot and +other `pgstream` objects using `xata stream destroy` command. + +Not cleaning up the replication slot will cause the WAL to be aggregated continuously and that would lead to full disk space. Use options like `max_slot_wal_keep_size` +to keep the max WAL size in check. + ## Summary -- You now have real-time streaming replication from your PostgreSQL database to Xata +- You now have real-time streaming replication (Postgres's logical replication) from your PostgreSQL database to Xata - Changes in your source database are automatically synchronized - Your data can be anonymized in transit using configurable transformers - The replication slot ensures no data loss during network interruptions From 8c5d338c26a42d6d639f5a8bae70af6dd3a47b70 Mon Sep 17 00:00:00 2001 From: Divyendu Singh Date: Thu, 4 Sep 2025 14:29:58 +0200 Subject: [PATCH 07/10] feedback --- docs/tutorials/streaming-replication.mdx | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/tutorials/streaming-replication.mdx b/docs/tutorials/streaming-replication.mdx index 1454731..223d10e 100644 --- a/docs/tutorials/streaming-replication.mdx +++ b/docs/tutorials/streaming-replication.mdx @@ -75,15 +75,12 @@ Where `CONN_STRING` is your PostgreSQL connection string with replication permis The configuration prompt will ask you to: - Select tables to replicate -- Configure anonymization rules if needed -- Set up transformation pipelines +- Set up transformation pipelines i.e. anonymization rules This creates a configuration file at `.xata/clone.yaml` that you can further customize. ## 6. Initialize and start streaming -First, initialize the streaming setup with an initial snapshot: - ```bash xata clone stream --source-url $CONN_STRING ``` @@ -145,8 +142,9 @@ xata clone stream --source-url $CONN_STRING ``` The process will resume from where it left off, catching up with any changes that occurred during the downtime. +However, if the too much lag accumulates then the Postgres server might slow down as it has to do both catching up on the lag and its normal operations. -If you terminate the `xata clone stream` process and do not wish to run streaming replication again. Clean up the replication slot and +If you terminate the `xata clone stream` process and do not wish to run streaming replication again, clean up the replication slot and other `pgstream` objects using `xata stream destroy` command. Not cleaning up the replication slot will cause the WAL to be aggregated continuously and that would lead to full disk space. Use options like `max_slot_wal_keep_size` From 33eb733230424a16d0af55550465deb69217484e Mon Sep 17 00:00:00 2001 From: Divyendu Singh Date: Thu, 4 Sep 2025 14:33:39 +0200 Subject: [PATCH 08/10] feedback --- docs/tutorials/streaming-replication.mdx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/tutorials/streaming-replication.mdx b/docs/tutorials/streaming-replication.mdx index 223d10e..39884f4 100644 --- a/docs/tutorials/streaming-replication.mdx +++ b/docs/tutorials/streaming-replication.mdx @@ -102,6 +102,8 @@ xata clone stream --source-url $CONN_STRING \ --filter-tables "users.*,orders.*,products.*" ``` +If this option is not specified it defaults to `*.*` + ### Custom transformations Edit your `.xata/clone.yaml` file to add custom transformations: From 2ccc958bf72e83d1aac1075ef7c1c36e4c233d50 Mon Sep 17 00:00:00 2001 From: Divyendu Singh Date: Mon, 8 Sep 2025 14:51:21 +0200 Subject: [PATCH 09/10] feedback --- docs/cli/stream.mdx | 4 ++-- docs/tutorials/streaming-replication.mdx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/cli/stream.mdx b/docs/cli/stream.mdx index 0aa1b28..9180ac7 100644 --- a/docs/cli/stream.mdx +++ b/docs/cli/stream.mdx @@ -1,9 +1,9 @@ --- title: Stream Command -description: Commands for managing database streaming operations +description: Commands for managing logical streaming replication operations --- -The `stream` command helps you manage database streaming operations (using logical replication) using `pgstream`. +The stream command helps you manage database streaming operations with `pgstream`, using logical replication. ## Subcommands diff --git a/docs/tutorials/streaming-replication.mdx b/docs/tutorials/streaming-replication.mdx index 39884f4..1d98657 100644 --- a/docs/tutorials/streaming-replication.mdx +++ b/docs/tutorials/streaming-replication.mdx @@ -16,7 +16,7 @@ This guide shows you how to set up continuous streaming replication from your pr ``` - A PostgreSQL database with: - Logical replication enabled - - A dedicated replication slot (or permissions to create one) + - Role with permissions to create a replication slow (`xata clone stream` command does that automatically) - Network connectivity from Xata to your database ## 2. Enable logical replication on source database From cb77a57ee109c74eec03584fd89746cf713d25fa Mon Sep 17 00:00:00 2001 From: Divyendu Singh Date: Mon, 8 Sep 2025 15:04:36 +0200 Subject: [PATCH 10/10] feedback --- docs/tutorials/streaming-replication.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/tutorials/streaming-replication.mdx b/docs/tutorials/streaming-replication.mdx index 1d98657..19c00e7 100644 --- a/docs/tutorials/streaming-replication.mdx +++ b/docs/tutorials/streaming-replication.mdx @@ -1,9 +1,9 @@ --- -title: Set up streaming replication +title: Set up a logical streaming replica description: Use Xata's streaming replication to keep your database continuously synchronized with real-time changes. --- -This guide shows you how to set up continuous streaming replication from your production PostgreSQL database to Xata, enabling real-time data synchronization with optional anonymization. +This guide shows you how to set up continuous logical streaming replication from your production PostgreSQL database to Xata, enabling real-time data synchronization with optional anonymization. ![Setting up streaming replication to Xata](assets/images/xata-streaming-replication.png)