我用Posgtresql 10。
我希望将两个表从数据库"db“复制到相同的两个表,在数据库”目的“中具有相同的列。
将wal_level值更改为postgresql.conf和max_replication_slots中的逻辑值为10
无防火墙
我在数据库"db“中创建了该出版物。
ALTER ROLE my_user WITH REPLICATION LOGIN PASSWORD 'my_password';
CREATE PUBLICATION my_publication;
ALTER PUBLICATION my_publication ADD TABLE table1;
ALTER PUBLICATION my_publication ADD TABLE table2;我在数据库中创建了一个带有时隙的子系统,因为我想在同一台服务器上复制:
SELECT pg_create_logical_replication_slot('test_slot_v1', 'pgoutput');
CREATE SUBSCRIPTION my_subscription CONNECTION 'host=localhost port=5432 password=my_password user=my_user dbname=db' PUBLICATION my_publication WITH (slot_name=test_slot_v1, create_slot=false);
alter subscription my_subscription refresh publication ;第一次复制工作。然后,当我更改一个varchar条目(而不是FK)的值时,该值不会被复制,并且postgres日志中有以下错误:
2020-04-12 16: 16: 57.886 CEST 720474日志:订阅"my_subscription“的逻辑复制应用进程已启动2020-04-12 16: 16: 57.888 CEST 720475错误:该数据库中没有创建复制槽"test_slot_v1”16: 16: 57.889 CEST 720474错误:无法从WAL流接收数据:该数据库中没有创建复制槽"test_slot_v1“04-12 16: 16: 57.890 CEST 712133日志:工作流程:订阅245251的逻辑复制工作器(PID 720474)退出,退出代码1
我确信我在包含订阅的数据库“目的”中创建了一个槽。
有什么想法吗?提前谢谢你。
发布于 2020-04-12 15:04:14
我将回答我的问题: Postgresql希望在创建发布的数据库"db“中创建时隙,而不是在创建订阅的数据库”目的地“中创建槽。
我所做的:
psql
\c destination
drop subscription my_subscription;
\q
psql
\c db
SELECT pg_create_logical_replication_slot('test_slot_v1', 'pgoutput');
\q
psql
\c destination
CREATE SUBSCRIPTION my_subscription CONNECTION 'host=localhost port=5432 password=my_password user=my_user dbname=db' PUBLICATION my_publication WITH (slot_name=test_slot_v1, create_slot=false);似乎不需要此命令:更改订阅my_subscription刷新发布;
https://stackoverflow.com/questions/61173094
复制相似问题