論理レプリケーション方式を使用して、 PolarDB for PostgreSQLにプライマリキーがないテーブルを他のデータベースに同期すると、テーブルに対する操作のエラーが報告される場合があります。 この問題を解決するには、polar_create_table_with_full_replica_identityパラメーターを指定します。
PolarDB for PostgreSQLの論理レプリケーションは、パブリッシュおよびサブスクライブモデルを使用します。 パブリッシャ側の操作は、データを同期させることができるように、構造的照会言語 (SQL) と同様の方法でサブスクライバ側で実行することができる。 テーブルの複製識別は、パブリッシャ側で構成されなければならず、それにより、サブスクライバ側で更新または削除されるデータを識別することができる。
次のタイプのレプリカIDがサポートされています。
- 主キー
- 一意のインデックス
- FULL (データの完全な行)
デフォルトでは、レプリカIDが主キーです。 主キーがないテーブルに論理レプリケーションを実装すると、変更操作でエラーが発生します。 その結果、サービスは期待どおりに実行できません。 次のエラーメッセージが返されます。
ERROR: レプリカIDがなく、削除を公開するため、テーブル "polardb_test" から削除できません
ヒント: テーブルからの削除を有効にするには、ALTER tableを使用してREPLICA IDENTITYを設定します。重要 論理レプリケーションを使用する場合は、同期するテーブルのプライマリキーを持たないすべてのレプリカIDが
FULLに設定されていることを確認します。 たとえば、Data Transmission Service (DTS) を使用してデータを同期する場合は、このルールに従います。 PolarDB for PostgreSQLには、テーブルのレプリカIDをFULLに変更するための次の2つの方法があります。
- 次のコマンドを実行して、既存のテーブルのレプリカIDを
FULLに変更します。ALTER table <table_name> replica identity FULL; polar_create_table_with_full_replica_identityパラメーターをonとして指定し、新しく作成したテーブルの既定のレプリカIDをFULLに設定します。