簡體   English   中英

將新表添加到發布后,PostgreSQL 邏輯復制不起作用

[英]PostgreSQL logical replication not working after added a new table to publication

我是 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)

重新創建訂閱后復制工作。

您能否告知是否有另一種方法可以使訂閱者將交易應用於新表?

順便說一句,我的版本:

x86_64-pc-linux-gnu 上的 PostgreSQL 12.2,由 gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39) 編譯,64 位

謝謝

在您對訂閱執行 REFRESH PUBLICATION 之前,不會復制新表。

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

REFRESH PUBLICATION 從發布者獲取丟失的表信息。 這將開始復制自上次調用 REFRESH PUBLICATION 或自 CREATE SUBSCRIPTION 以來添加到訂閱發布的表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM