選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

使用 Amazon 的多可用區域資料庫叢集設定 PostgreSQL 邏輯複寫 RDS

焦點模式
使用 Amazon 的多可用區域資料庫叢集設定 PostgreSQL 邏輯複寫 RDS - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

透過搭配多可用區域資料庫叢集使用 PostgreSQL 邏輯複寫,您可以複寫和同步個別資料表,而不是整個資料庫執行個體。邏輯複寫會使用發佈與訂閱模型,將來源中的變更複寫到一或多個收件人。它的運作方式是使用 PostgreSQL 預先寫入日誌 () 中的變更記錄WAL。如需詳細資訊,請參閱執行 Amazon RDS for Postgre 的邏輯複寫SQL

當您在多可用區域資料庫叢集的寫入器資料庫執行個體上建立新的邏輯複寫插槽時,插槽會以非同步方式複製到叢集中的每個讀取器資料庫執行個體。讀取器資料庫執行個體上的插槽會持續與寫入器資料庫執行個體上的插槽同步。

針對 PostgreSQL 版本 14.8-R2 及更高版本以及 15.3-R2 及更高版本執行RDS的多可用區域資料庫叢集支援邏輯複寫。

注意

除了原生 PostgreSQL 邏輯複寫功能之外,執行 RDS for PostgreSQL 的多可用區域資料庫叢集也支援 pglogical擴充功能。

如需 PostgreSQL 邏輯複寫的詳細資訊,請參閱 PostgreSQL 文件中的邏輯複寫

必要條件

若要設定多可用區域資料庫叢集的 PostgreSQL 邏輯複寫,您必須符合下列先決條件。

設定邏輯複寫

若要為多可用區域資料庫叢集設定邏輯複寫,請在相關聯的資料庫叢集參數群組內啟用特定參數,然後建立邏輯複寫插槽。

注意

從 PostgreSQL 第 16 版開始,您可以使用多可用區域資料庫叢集的讀取器資料庫執行個體進行邏輯複寫。

設定RDS適用於 PostgreSQL 多可用區域資料庫叢集的邏輯複寫
  1. 開啟與 RDS for PostgreSQL 多可用區域資料庫叢集相關聯的自訂資料庫叢集參數群組。

  2. 參數搜尋欄位中,找出 rds.logical_replication 靜態參數並將其值設為 1。此參數變更可以增加WAL產生量,因此只有在您使用邏輯插槽時才啟用它。

  3. 做為此變更的一部分,請設定下列資料庫叢集參數。

    • max_wal_senders

    • max_replication_slots

    • max_connections

    根據您預期的用量,您可能也需要變更下列參數的值。不過,在許多情況下,預設值就足夠了。

    • max_logical_replication_workers

    • max_sync_workers_per_subscription

  4. 重新啟動多可用區域資料庫叢集,讓參數值生效。如需說明,請參閱 重新啟動 Amazon 的多可用區域資料庫叢集和讀取器資料庫執行個體 RDS

  5. 使用邏輯複寫槽 中所述,在多可用區域資料庫叢集的寫入器資料庫執行個體上建立邏輯複寫插槽。此程序要求您指定解碼外掛程式。目前, RDS for PostgreSQL test_decoding支援隨附 Postgre 的 wal2json、 和 pgoutput 外掛程式SQL。

    插槽會以非同步方式複製到叢集中的每個讀取器資料庫執行個體。

  6. 驗證多可用區域資料庫叢集的所有讀取器資料庫執行個體上的插槽狀態。若要這麼做,請檢查所有讀取器資料庫執行個體上的 pg_replication_slots 檢視,並確定當應用程式主動取用邏輯變更時,confirmed_flush_lsn 狀態正在進行。

    下列命令示範如何檢查讀取器資料庫執行個體上的複寫狀態。

    % psql -h test-postgres-instance-2.abcdefabcdef.us-west-2.rds.amazonaws.com postgres=> select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots; slot_name | slot_type | confirmed_flush_lsn --------------+-----------+--------------------- logical_slot | logical | 32/D0001700 (1 row) postgres=> select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots; slot_name | slot_type | confirmed_flush_lsn --------------+-----------+--------------------- logical_slot | logical | 32/D8003628 (1 row) % psql -h test-postgres-instance-3.abcdefabcdef.us-west-2.rds.amazonaws.com postgres=> select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots; slot_name | slot_type | confirmed_flush_lsn --------------+-----------+--------------------- logical_slot | logical | 32/D0001700 (1 row) postgres=> select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots; slot_name | slot_type | confirmed_flush_lsn --------------+-----------+--------------------- logical_slot | logical | 32/D8003628 (1 row)

在完成複寫任務之後,您應該停止複寫程序、捨棄複寫插槽,並關閉邏輯複寫。若要關閉邏輯複寫,請修改您的資料庫叢集參數群組,並將 rds.logical_replication 的值設回 0。重新啟動叢集,讓參數變更生效。

限制與建議

下列限制和建議適用於搭配執行 PostgreSQL 第 16 版的多可用區域資料庫叢集使用邏輯複寫:

  • 您只能使用寫入器資料庫執行個體來建立或捨棄邏輯複寫槽。例如,CREATE SUBSCRIPTION命令必須使用主機連線字串中的叢集寫入器端點。

  • 在任何資料表同步或重新同步期間,您必須使用叢集寫入器端點。例如,您可以使用下列命令來重新同步新增的資料表:

    Postgres=>ALTER SUBSCRIPTION subscription-name CONNECTION host=writer-endpoint Postgres=>ALTER SUBSCRIPTION subscription-name REFRESH PUBLICATION
  • 您必須等待資料表同步完成,才能使用讀取器資料庫執行個體進行邏輯複寫。您可以使用pg_subscription_rel目錄資料表來監控資料表同步。當資料srsubstate欄設定為就緒 () 時,資料表同步完成r

  • 我們建議在初始資料表同步完成後,使用執行個體端點進行邏輯複寫連線。下列命令會將複寫卸載至其中一個讀取器資料庫執行個體,以降低寫入器資料庫執行個體的負載:

    Postgres=>ALTER SUBSCRIPTION subscription-name CONNECTION host=reader-instance-endpoint

    您無法一次在多個資料庫執行個體上使用相同的插槽。當兩個或多個應用程式從叢集中的不同資料庫執行個體複寫邏輯變更時,某些變更可能會因為叢集容錯移轉或網路問題而遺失。在這些情況下,您可以使用執行個體端點在主機連線字串中進行邏輯複寫。使用相同組態的其他應用程式會顯示下列錯誤訊息:

    replication slot slot_name is already active for PID x providing immediate feedback.
  • 使用pglogical擴充功能時,您只能使用叢集寫入器端點。延伸模組具有已知限制,可在資料表同步期間建立未使用的邏輯複寫槽。過時的複寫槽會保留預先寫入日誌 (WAL) 檔案,並可能導致磁碟空間問題。

隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。