Postgresql复制槽错误postgresql
Postgresql Replication slot error postgresql
我使用的是 Posgtresql 10。
我想将数据库 "db" 中的 2 个表复制到数据库 "destination" 中具有相同列的相同的两个表。
将 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;
我在数据库 "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] LOG: the logical replication
apply process for the subscription "my_subscription" has started
2020-04-12 16: 16: 57.888 CEST [720475] ERROR: the replication slot
"test_slot_v1" was not created in this database 2020-04-12 16: 16:
57.889 CEST [720474] ERROR: could not receive data from the WAL stream: ERROR: the replication slot "test_slot_v1" was not created in
this database 2020-04-12 16: 16: 57.890 CEST [712133] LOG: work
process: logical replication worker for subscription 245251 (PID
720474) exit with exit code 1
我确定我在保存订阅的数据库 "destination" 中创建了插槽。
有什么想法吗?提前谢谢你。
我会回答我的问题:
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 刷新发布 ;
我使用的是 Posgtresql 10。
我想将数据库 "db" 中的 2 个表复制到数据库 "destination" 中具有相同列的相同的两个表。
将 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;
我在数据库 "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] LOG: the logical replication apply process for the subscription "my_subscription" has started 2020-04-12 16: 16: 57.888 CEST [720475] ERROR: the replication slot "test_slot_v1" was not created in this database 2020-04-12 16: 16: 57.889 CEST [720474] ERROR: could not receive data from the WAL stream: ERROR: the replication slot "test_slot_v1" was not created in this database 2020-04-12 16: 16: 57.890 CEST [712133] LOG: work process: logical replication worker for subscription 245251 (PID 720474) exit with exit code 1
我确定我在保存订阅的数据库 "destination" 中创建了插槽。
有什么想法吗?提前谢谢你。
我会回答我的问题: 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 刷新发布 ;