すべてのプロダクト
Search
ドキュメントセンター

PolarDB:polar_create_table_with_full_replica_identity

最終更新日:Jun 05, 2024

論理レプリケーション方式を使用して、 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に設定します。