TOAST カラム、replication slots、publications、スキーマ変更、型マッピングなど、Postgres のレプリケーションの仕組みに関する多くの疑問は、ClickPipes for Postgres よくある質問で扱っています。そこに記載されている情報は、ClickHouse Managed Postgres の移行にも当てはまります。
レプリケーション中に「enum に対する無効な入力値」エラーが表示される
ALTER TYPE ... ADD VALUE コマンドは自動的に伝播されないため、初回のスキーマ設定後にソース側で追加された新しい enum 値があると、ターゲット側で insert が失敗します。
これを修正するには、ターゲットの Postgres で enum 型に不足している値を追加します。
your_enum_type はご使用の enum 型名に、'new_value' はエラーメッセージに表示されている不足値に置き換えてください。
レプリケーション中に一意制約またはチェック制約違反エラーが発生する
- 一意制約: 変更は、主キーごとの最新の値を書き込むバッチ
MERGE/UPSERT操作として適用されるため、特定のキーに対する操作順序が一意索引で想定される順序と一致しない場合があります。そのため、MERGEの完了後には制約が満たされていても、トランザクション内で一時的にUNIQUE制約に違反することがあります。Postgres では外部キーの場合とは異なり、一意索引のチェックを遅延できないため、チェックをトランザクションの終了時まで延期することはできません。これはデータ整合性には影響しません。行の識別は主キーによって定義され、MERGEロジックも同じ主キーに基づいているためです。 - チェック制約: ターゲットのチェック制約がソースより厳しい場合や、バッチ
MERGE中の中間状態が、最終状態では制約を満たすにもかかわらず、一時的に制約を満たさない場合があります。一意制約と同様に、MERGEは行の識別を定義する主キーに基づいているため、これはデータ整合性には影響しません。