使用逻辑复制将数据同步到另一个Postgres数据库
在本示例中,您需要准备:
- 一个 Supabase 项目
- 一个 Postgres 数据库(运行 v10 或更新版本)
您需要在两个数据库上执行命令,将变更从 Supabase 数据库发布到外部数据库。
- 在 Supabase 数据库 上创建
publication
:
1CREATE PUBLICATION example_pub;
- 同样在 Supabase 数据库 上,创建
replication slot
:
1select pg_create_logical_replication_slot('example_slot', 'pgoutput');
- 现在我们将连接到 外部数据库 并订阅
publication
(注意:):
这需要直接连接到您的数据库,您可以在控制面板中找到连接信息。
您还需要确保复制目标支持 ipv6。
如果不希望使用 postgres
用户,可以使用 postgres
用户执行 CREATE ROLE <user> WITH REPLICATION;
创建新角色。
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
设置为 false
是因为已提供 slot_name
且该 slot 已在步骤 2 中创建。
如需复制 slot 创建前的数据,请将 copy_data
设为 true
。
- 将所有需要复制的表添加到 publication 中。
1ALTER PUBLICATION example_pub ADD TABLE example_table;
- 使用
pg_stat_replication
检查复制状态
1select * from pg_stat_replication;