0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DMSでPostgreSQL間の同期をしようとして詰まったときのまとめ

Posted at

概要

プライベードクラウドのPostgeSQLからAWS上のAurora PosrgreSQLへテーブル同期する方法で、DMSだとうまくいかなかったので素直にPostgreSQLのロジカルレプリケーションで対応した時のまとめ。

構成

PostgreSQL(ソース) → DX ➔ DMS → Aurora PostgreSQL(宛先)

問題

あるテーブルをそのまま同期したかったが、1つのカラムだけ同期できず下記の通り制約がある事が分かった。
character varying[] 型に該当し、同期出来なかった。

AWS DMS は以下に制限があります:
json / jsonb → LOB 扱いすれば基本的に取れる
text[] / varchar[] / 配列型 → 未対応(サポート外)

補足

DMSの論理レプリケーション用の出力プラグインについて、デフォルトだとtest_decodingになっているので他のプラグインであれば出来る可能性がないかpgoutputとwal2jsonで試したが同様の理由で不可だった。今回のケースでは他のプラグインでも同期出来なかったが、デフォルトのtest_decodingは商用利用に耐えられないようなのでDMSを使う場合は他のプラグインを検討する必要がある。

主要プラグインの比較

項目 pgoutput test_decoding wal2json decoderbufs pglogical
主目的 PostgreSQL間の論理レプリケーション WAL内容のテキスト表示、テスト用 WAL内容をJSON形式で外部連携 WAL内容をProtocol Buffers形式で外部連携 高度な部分レプリケーション、DB間複製
標準/サポート PostgreSQL標準 (10以降) PostgreSQL標準 (付属) 拡張プラグイン 拡張プラグイン 拡張プラグイン
出力形式 バイナリ形式(論理デコーディング用) テキスト形式 JSON形式 Protocol Buffers形式 バイナリ/内部形式
利用例 CREATE PUBLICATION / SUBSCRIPTION WAL解析、DMS検証、学習 Kafka連携、DMS経由で他DBへ同期 マイクロサービス連携、高速外部処理 テーブル単位の部分レプリケーション、DB同期
複雑型対応 配列・JSON対応(ただしツールによる制約あり) 文字列として出力(アプリ側変換必要) JSON化されるので扱いやすい 外部アプリ側でデシリアライズ必要 配列・JSON型対応(PostgreSQL互換)
本番使用 推奨 推奨されない(確認用) 推奨可能 推奨可能 推奨(拡張インストール必要)
外部ツール対応 PostgreSQL間のレプリケーションに最適 外部ツールではカスタム対応が必要 DMSやKafka等に対応 外部アプリやサービス連携に最適 PostgreSQL拡張環境で対応可能

まとめ

DMSは異種DB間の移行/同期に利用するケースを想定されているようなので、同じDB間での同期はDBの機能を使うのが無難である事を実感した。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?