mli*_*ner 5 postgresql replication
我创建了一个逻辑复制 PUBLICATION 使用FOR ALL TABLES. 现在我意识到我不想复制所有的表。我尝试从出版物中删除其中一个表格,但是:
mydb=# alter publication replicapublication drop table only migrations;
ERROR: publication "replicapublication" is defined as FOR ALL TABLES
DETAIL: Tables cannot be added to or dropped from FOR ALL TABLES publications.
Run Code Online (Sandbox Code Playgroud)
我已经完成了数百 GB 的巨大同步,而且我不想从新出版物开始。
问题: 1、本刊有赎回的希望吗?2. 如果没有,有没有办法创建一个完全同步的新发布,而不用完全同步重新开始?
谢谢。
对于1,不,我不认为。2,可能,但似乎令人担忧。
我天真地认为,创建一个列出您的表的新发布,然后在订阅端禁用旧订阅并使用同一插槽创建新订阅,所有这些都在一个事务中进行。但做了一个实验,如果发布者负载不足,这不起作用。它最终会丢失一些更改。然而,如果发布者处于静止状态并且订阅者在交换时陷入困境,那么它似乎确实有效。
-- warning: does not work transactionally!
begin;
alter subscription sub disable;
alter subscription sub set (SLOT_NAME = NONE); -- used to be 'sub'
create subscription sub2 CONNECTION '' PUBLICATION pub2 with (
copy_data = false,
slot_name='sub',
create_slot=false) ;
commit;
Run Code Online (Sandbox Code Playgroud)
我无法确定这是否是一个错误。我在文档中没有看到任何可以为这种非事务行为辩解的内容,但我没有仔细阅读整个内容。