本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
邏輯複寫
邏輯複寫是一種方法,可根據物件的複寫身分及其變更來複寫資料物件及其變更。邏輯複寫使用發佈和訂閱模型,其中一或多個訂閱者訂閱發佈者節點上的一或多個發佈。訂閱者會從訂閱的出版物中提取資料。
邏輯複寫可讓您精細控制資料複寫和安全性。您可以在下列使用案例中使用邏輯複寫:
在 PostgreSQL 的不同主要版本之間複寫
在不同平台上的 PostgreSQL 執行個體之間複寫 (例如 Linux 到 Windows)
架構
下列工作流程步驟顯示邏輯複寫架構的運作方式:
您拍攝發佈者資料庫上的資料的快照,並將該資料複製到訂閱者資料庫。
發佈者資料庫中的變更會即時傳送給訂閱者。
訂閱者會以與發佈者相同的順序套用資料,以確保單一訂閱內出版物的交易一致性。
可以在主要執行個體 (發佈者) 上定義發佈。發佈是從資料表或一組資料表產生的一組變更。您可以從 INSERT、UPDATE、DELETE 和 TRUNCATE 操作的組合中選擇變更。根據預設,所有這些變更都會複寫到訂閱者資料庫。這與實體複寫相反,其中確切的區塊地址用於byte-by-byte複寫。
發佈的資料表必須設定 aREPLICA IDENTITYfull
。這表示整列都會成為金鑰。我們建議您將複本身分設定為full
最後一個補充,因為此設定效率不佳。
Asubscription 是邏輯複寫的下游端。定義訂閱的節點稱為訂閱者。訂閱會定義與另一個資料庫的連線,以及想要訂閱的一組出版物 (一或多個)。
組態設定
發佈者設定需要下列組態:
wal_level
設定為logical
。max_replication_slots
設定為至少容納預期連接的訂閱數量,以及一些預留位置以進行資料表同步。max_wal_senders
設定為 以容納max_replication_slots
您的實體複本數目。
訂閱者設定需要下列組態:
設定
max_replication_slots
以容納您計劃新增至訂閱用戶的最少訂閱數量,以及一些預留訂閱以進行資料表同步。設定
max_logical_replication_workers
以容納至少訂閱數量和一些預留工作者進行資料表同步。max_worker_processes
將至少 設定為 (max_logical_replication_workers
+1
)。
每個訂閱會透過一個複寫槽接收變更。
下列步驟說明如何執行邏輯複寫:
針對來源資料庫中的一組資料表 (將是複寫的一部分),使用 CREATE PUBLICATION
命令來建立發佈者。 使用 CREATE SUBSCRIPTION
命令建立訂閱者,然後在建立訂閱者時提供發佈詳細資訊。 初始資料載入會自動從來源資料庫開始到目標資料庫。
複寫槽擷取的變更資料會複寫至目標資料庫。
使用 pg_stat_replication
(目錄資料表) 檢查複寫的狀態。使用 pg_stat_replication_slots 檢查複寫槽。
如需詳細資訊,請參閱 AWS 資料庫部落格中的使用邏輯複寫將受管 Amazon RDS for PostgreSQL 和 Amazon Aurora 複寫至自我管理 PostgreSQL
限制
建議您在開始遷移之前,考慮邏輯複寫方法的下列限制:
邏輯複寫目前具有最多的限制和功能差距。
邏輯複寫無法複寫資料定義語言 (DDL)、序列和大型物件操作。截斷動作 (適用於具有外部索引鍵的資料表) 必須在相同的訂閱中包含相關資料表。
如需邏輯複寫限制的詳細資訊,請參閱 31.6。PostgreSQL 文件中的限制