gpt4 book ai didi

将新表添加到发布后,PostgreSQL 逻辑复制无法正常工作

转载 作者:行者123 更新时间:2023-12-01 21:46:03 26 4
gpt4 key购买 nike

我是 PostgreSQL 逻辑复制的新手。我做了测试,在我向发布添加一个新表后,我发现复制不起作用,直到我重新创建订阅,我确信重新创建订阅不是最佳实践,请问你如何制作订阅者为新表申请事务?

测试如下:

  1. 在主端和复制端创建第一个表:

     create table rep_test (a int primary key, b int);
  2. 在主端创建发布:

     CREATE PUBLICATION rep_test_pub FOR table public.rep_test;
  3. 在复制端创建订阅:

     CREATE SUBSCRIPTION rep_test_sub CONNECTION 'host=XXX port=5432 dbname=rocket user=XXX password=XXX' PUBLICATION rep_test_pub WITH (copy_data = false);
  4. 测试复制,复制有效。初级侧:

     insert into rep_test values (1, 1); insert into rep_test values (2, 1);

    复制:

     select * from rep_test;

    *---*---*
    | a | b |
    *---*---*
    | 1 | 1 |
    | 2 | 1 |
    *---*---*
  5. 在主端和复制端创建一个新表

     create table rep_test (a int primary key, b text);
  6. 在主端添加新表到发布

     alter publication rep_test_pub add table public.rep_test2;
  7. 测试复制,复制不工作。初级:

     insert into rep_test values (3, 1); insert into rep_test2 values (1,'text');

复制:

    select * from rep_test;

*---*---*
| a | b |
*---*---*
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
*---*---*

select * from rep_test2;

注意:rep_test2中没有数据,复制没有复制rep_test2

  1. 重启复制 postgres,复制仍然不工作。

  2. 删除并重新创建订阅,复制有效。

主要:

truncate table rep_test; truncate table rep_test2;

复制:

drop subscription rep_test_sub;
CREATE SUBSCRIPTION rep_test_sub CONNECTION 'host=XXX port=5432 dbname=rocket user=XXX password=XXX' PUBLICATION rep_test_pub WITH (copy_data = false);

主要:

insert into rep_test values (1, 1); insert into rep_test2 values (1, 'text');

复制:

select * from rep_test;select * from rep_test2;

*---*---*
| a | b |
*---*---*
| 1 | 1 |
*---*---*
(1 row)

*---*-----*
| a | b |
*---*-----*
| 1 | text|
*---*-----*
(1 row)

复制在重新创建订阅后工作。

请问有没有其他方法可以让订阅者向新表申请交易?

顺便说一句,我的版本:

PostgreSQL 12.2 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit

谢谢

最佳答案

在您对订阅执行 REFRESH PUBLICATION 之前,不会复制新表。

https://www.postgresql.org/docs/current/sql-altersubscription.html

REFRESH PUBLICATION Fetch missing table information from publisher. This will start replication of tables that were added to the subscribed-to publications since the last invocation of REFRESH PUBLICATION or since CREATE SUBSCRIPTION.

关于将新表添加到发布后,PostgreSQL 逻辑复制无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60535508/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com