Postgresql

Postgres 13:訂閱卡在初始化狀態

  • February 9, 2022

Postgres 版本:13.5

我的 2 個數據庫之間有 2 組發布/訂閱。其中一個工作正常,另一個卡在所有表的初始化狀態。

sourcedb=# select * from pg_publication;
 oid  |        pubname         | pubowner | puballtables | pubinsert | pubupdate | pubdelete | pubtruncate | pubviaroot
-------+------------------------+----------+--------------+-----------+-----------+-----------+-------------+------------
19585 | omx_archive_big_tables |    16420 | f            | t         | t         | t         | t           | f
19584 | omx_archive            |    16420 | f            | t         | t         | t         | t           | f
targetdb=# select * from pg_subscription_rel ;
 srsubid   |  srrelid   | srsubstate |   srsublsn
------------+------------+------------+---------------
3615804367 | 3322052690 | i          |
3615804367 | 3322052570 | i          |
3615756798 | 3322051793 | r          | 9E7E/BF5F82D8
3615804367 | 3322052133 | i          |
3615804367 | 3322054214 | i          |
3615756798 | 3322051802 | r          | 9E7E/C149BBD8
3615804367 | 3322051757 | i          |
targetdb=# select * from pg_subscription;
-[ RECORD 1 ]---+----------------------------------------------------------------------------------------------------------
oid             | 3615756798
subdbid         | 16589
subname         | sub_omx_archive_big_tables_tci
subowner        | 16420
subenabled      | t
subconninfo     | xxx
subslotname     | sub_omx_archive_big_tables_tci
subsynccommit   | off
subpublications | {omx_archive_big_tables}
-[ RECORD 2 ]---+----------------------------------------------------------------------------------------------------------
oid             | 3615804367
subdbid         | 16589
subname         | sub_omx_archive_tci
subowner        | 16420
subenabled      | t
subconninfo     | xxxx
subslotname     | sub_omx_archive_tci
subsynccommit   | off
subpublications | {omx_archive}

我已經放棄了訂閱,多次重新創建和刷新它,但它不會從初始化階段移動。

除了刪除出版物並重新創建之外,有關如何再次開始複製數據的任何建議?

我在目標數據庫日誌上看到的唯一語句是

logical replication apply worker for subscription ""sub_omx_archive_tci"" has started",,,,,,,,,"

正如我在另一個訂閱中看到的那樣,我沒有看到為此訂閱中的任何表啟動了邏輯複製表同步工作程序。

我應該在日誌文件中尋找什麼特別的東西嗎?

更新: 錯誤看起來像在訂閱者方面。在另一個數據庫上訂閱相同的出版物時,工作正常。在訂戶方面,我0/0認為remote_lsn

targetdb=# select * from pg_replication_origin_status ;
local_id |  external_id  |   remote_lsn   |   local_lsn
----------+---------------+----------------+----------------
       1 | pg_3615756798 | 9E96/37152C80  | 1518C/9014BD98
       2 | pg_3616584803 | 0/0            | 0/0
(2 rows)

有人在 Postgres 社區為此幫助了我,所以在這裡回答。

目標數據庫不足max_logical_replication_workers

由於我已經有 2 個訂閱,並且max_logical_replication_workers目標數據庫上的 設置為 2。所以當我使用 開始第二個訂閱時copy_data=true,它無法啟動臨時訂閱以從源複製數據。這就是為什麼它卡在初始化階段。

為了糾正它,我max_logical_replication_workers在目標數據庫上將其增加到 4。這需要重新啟動數據庫,因此請注意,您必須重新啟動接收數據庫。

瞧!有效。

targetdb=# show max_logical_replication_workers ;
max_logical_replication_workers
---------------------------------
4
(1 row)

請看我WARNING在日誌文件中遺漏了這個。

"WARNING,53400,"out of logical replication worker slots",,"You might need to increase max_logical_replication_workers.",,,,,,,"","logical replication worker"

因此,如果您遇到此錯誤,請注意您的日誌文件中是否存在此類錯誤。

引用自:https://dba.stackexchange.com/questions/306904