PostgreSQL复制槽错误PostgreSQL [英] Postgresql Replication slot error postgresql
本文介绍了PostgreSQL复制槽错误PostgreSQL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用Posgtresql 10。
我要将数据库"db"中的两个表复制到数据库"Destination"中具有相同列的两个表。
在postgresql.conf中将WAL_LEVEL值更改为逻辑 和最大复制插槽数设置为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;
我在数据库"Destination"中创建了一个订阅,其槽原因是我要在同一台服务器上复制:
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]错误:复制插槽 未在该数据库2020-04-12 16:16中创建测试插槽v1: 57.889 CEST[720474]错误:无法从WAL流接收数据:错误:复制槽"TEST_SLOT_v1"未在中创建 该数据库2020-04-12 16:16:57.890 CEST[712133]日志:WORK 进程:订阅245251的逻辑复制工作进程(ID 720474)退出,退出代码为1
我确信我在数据库"Destination"中创建了存放订阅的槽。
有什么想法吗?提前谢谢您。
推荐答案
我回答我的问题: PostgreSQL希望在我创建发布的数据库中创建槽,而不是在我创建订阅的数据库中创建目标。
我做了什么:
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);
似乎不需要此命令: ALTER SUBSCRIPTION MY_SUBSCRIPTION REFRESH PUBLICATION;
这篇关于PostgreSQL复制槽错误PostgreSQL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文