Replicate to another Postgres database using Logical Replication
For this example, you will need:
- A Supabase project
- A Postgres database (running v10 or newer)
You will be running commands on both of these databases to publish changes from the Supabase database to the external database.
- Create a
publication
on the Supabase database:
1CREATE PUBLICATION example_pub;
- Also on the Supabase database, create a
replication slot
:
1select pg_create_logical_replication_slot('example_slot', 'pgoutput');
- Now we will connect to our external database and subscribe to our
publication
Note: ):
This will need a direct connection to your database and you can find the connection info in the Dashboard.
You will also need to ensure that ipv6 is supported by your replication destination.
If you would prefer not to use the postgres
user, then you can run CREATE ROLE <user> WITH REPLICATION;
using the postgres
user.
1234CREATE SUBSCRIPTION example_subCONNECTION 'host=db.oaguxblfdassqxvvwtfe.supabase.co user=postgres password=YOUR_PASS dbname=postgres'PUBLICATION example_pubWITH (copy_data = true, create_slot=false, slot_name=example_slot);
create_slot
is set to false
because slot_name
is provided and the slot was already created in Step 2.
To copy data from before the slot was created, set copy_data
to true
.
- Add all the tables that you want replicated to the publication.
1ALTER PUBLICATION example_pub ADD TABLE example_table;
- Check the replication status using
pg_stat_replication
1select * from pg_stat_replication;