當您通過邏輯複製的方式將PolarDB PostgreSQL版中的無主鍵表同步到其它資料庫時,可能導致該表上的操作報錯,您可以通過設定polar_create_table_with_full_replica_identity參數解決該問題。
PolarDB PostgreSQL版的邏輯複製採用“發布-訂閱”模式,可以將發布端的操作以類似SQL的形式在訂閱端執行,達到資料同步的目的。為了在訂閱端標識待更新或刪除的資料,發布端需要配置表的複製標識。
複製標識支援以下幾種類型:
- 主鍵
- 唯一索引
- FULL(整行資料)
複製標識預設為主鍵,如果一個沒有主鍵的表進行邏輯複製,會出現變更操作報錯的情況,從而影響業務的正常運行。報錯資訊如下所示:
ERROR: cannot delete from table "polardb_test" because it does not have a replica identity and publishes deletes
HINT: To enable deleting from the table, set REPLICA IDENTITY using ALTER TABLE.重要 當您使用邏輯複製(例如使用DTS進行資料同步)時,需要確保所有待同步的無主鍵表的複製標識均已設定為
FULL。PolarDB PostgreSQL版提供了如下兩種方式將表的複製標識修改為FULL:
- 將現有表的複製標識修改為
FULL,修改命令如下:ALTER TABLE <table_name> REPLICA IDENTITY FULL; - 將
polar_create_table_with_full_replica_identity參數設定為on即可將建立表的預設複製標識設定為FULL。