从逻辑复制切换到流式复制后无法从表中删除



在我的DEV服务器上,我测试了逻辑复制,然后返回流。

Nowwal_level = replica我有两个奴隶:

pid  |state     |application_name    |client_addr|write_lag      |flush_lag      |replay_lag     |sync_priority|sync_state|
-----|----------|--------------------|-----------|---------------|---------------|---------------|-------------|----------|
12811|streaming |db-slave1           |*.*.*.*    |00:00:00.000569|00:00:00.001914|00:00:00.001932|            0|async     |
25978|streaming |db-slave2           |*.*.*.*    |00:00:00.000568|00:00:00.001913|00:00:00.001931|            0|async     |

现在我创建了一个新表并插入一条记录。例如:

create table test_delete (
id int
);
insert into test_delete values (1);
delete from test_delete where id = 1;

表被创建并复制到两个slave,但是删除查询失败,报错:

SQL Error [55000]: Error: cannot delete from table "test_delete"因为它没有副本标识并发布删除提示:要启用从表中删除,请使用ALTER table设置REPLICA IDENTITY。

所以,在切换到逻辑复制和从表中删除之前,我需要帮助恢复状态

经过一番调查,我找到了解决办法。尽管在postgresql .conf中wal_level已经更改,但所有表仍然出现在pg_publication_tables中。所以对于检查发布状态使用:

select * from pg_publication_tables;

drop publication <publication_name>;

最新更新