PostgreSQL复制槽错误PostgreSQL [英] Postgresql Replication slot error postgresql

查看:20
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆