執行 Amazon RDS for Postgre 的邏輯複寫SQL - Amazon Relational Database Service

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

執行 Amazon RDS for Postgre 的邏輯複寫SQL

從 10.4 版開始, RDS for PostgreSQL SQL 支援 PostgreSQL 10 中引入的發佈和訂閱語法。若要進一步了解,請參閱 PostgreSQL 文件中的邏輯複寫

注意

除了 PostgreSQL 10 中介紹的原生 PostgreSQL 邏輯複寫功能之外, RDS for PostgreSQL 也支援 pglogical 擴充功能。如需詳細資訊,請參閱使用 pglogical 跨執行個體同步資料

接下來,您可以找到設定RDS適用於 PostgreSQL 資料庫執行個體的邏輯複寫的相關資訊。

了解邏輯複寫和邏輯解碼

RDS for PostgreSQL 支援使用 Postgre SQL的邏輯複寫插槽串流預先寫入日誌 (WAL) 變更。它也支援使用邏輯解碼。您可以在執行個體上設定邏輯複寫槽,然後透過這些槽將資料庫變更串流至用戶端,例如 pg_recvlogical。邏輯複寫插槽在資料庫層級建立,且支援對單一資料庫的多個複寫連線。

PostgreSQL 邏輯複寫最常見的用戶端是 Amazon EC2執行個體上的 AWS Database Migration Service 或自訂受管主機。邏輯複寫插槽沒有關於串流接收者的資訊。此外,不要求目標必須是複本資料庫。如果您設定邏輯複寫槽,但未讀取這個槽,則資料會寫入並快速填滿資料庫執行個體的儲存體。

您可以使用 RDS 參數、複寫連線類型和安全角色來開啟 Amazon 的 PostgreSQL 邏輯複寫和邏輯解碼。邏輯解碼的用戶端可以是任何可以建立 PostgreSQL 資料庫執行個體上資料庫的複寫連線的用戶端。

開啟 RDS for PostgreSQL 資料庫執行個體的邏輯解碼
  1. 確保您正在使用的使用者帳戶具有以下角色:

    • 可讓您開啟邏輯複寫的 rds_superuser 角色

    • 授權來管理邏輯槽和利用邏輯槽來串流資料的 rds_replication 角色

  2. rds.logical_replication 靜態參數設為 1。套用此參數時,也會設定 wal_levelmax_wal_sendersmax_replication_slotsmax_connections 參數。這些參數變更可能會增加WAL產生,因此只有在您使用邏輯插槽時才能設定 rds.logical_replication 參數。

  3. 為了讓靜態 rds.logical_replication 參數生效,請重新啟動資料庫執行個體。

  4. 建立邏輯複寫槽將在下一章節中說明。此程序要求您指定解碼外掛程式。目前, RDS for PostgreSQL 支援隨附 Postgre 的 test_decoding 和 wal2json 輸出外掛程式SQL。

如需 PostgreSQL 邏輯解碼的詳細資訊,請參閱 PostgreSQL 文件

使用邏輯複寫槽

您可以使用 SQL 命令來使用邏輯插槽。例如,下列命令test_slot會使用預設 PostgreSQL 輸出外掛程式 建立名為 的邏輯插槽test_decoding

SELECT * FROM pg_create_logical_replication_slot('test_slot', 'test_decoding'); slot_name | xlog_position -----------------+--------------- regression_slot | 0/16B1970 (1 row)

若要列出邏輯槽,請使用下列命令。

SELECT * FROM pg_replication_slots;

若要捨棄邏輯槽,請使用下列命令。

SELECT pg_drop_replication_slot('test_slot'); pg_drop_replication_slot ----------------------- (1 row)

如需使用邏輯複寫插槽的更多範例,請參閱 PostgreSQL 文件中的邏輯解碼範例

建立邏輯複寫槽之後,即可開始串流。下列範例顯示如何透過串流複寫協定來控制邏輯解碼。此範例使用包含在 PostgreSQL 分佈中的程式 pg_recvlogical。這會需要將用戶端身分驗證設為允許複寫連線。

pg_recvlogical -d postgres --slot test_slot -U postgres --host -instance-name.111122223333.aws-region.rds.amazonaws.com -f - --start

若要查看檢視 pg_replication_origin_status 的內容,請查詢 pg_show_replication_origin_status 函式。

SELECT * FROM pg_show_replication_origin_status(); local_id | external_id | remote_lsn | local_lsn ----------+-------------+------------+----------- (0 rows)