Postgresql
Postgres 13:訂閱卡在初始化狀態
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"
因此,如果您遇到此錯誤,請注意您的日誌文件中是否存在此類錯誤。