同じ構造の2つのデータベースを比較することは可能ですか?DB1とDB2の2つのデータベースがあり、それらの間にデータの違いがあるかどうかを確認したいとします。
同じ構造の2つのデータベースを比較することは可能ですか?DB1とDB2の2つのデータベースがあり、それらの間にデータの違いがあるかどうかを確認したいとします。
回答:
(これらのツールのほとんどは構造のみを比較でき、データは比較できないことに注意してください)
無料のもの:
商業の:
apgdiff
継承テーブルをうまくサポートしていないようで、使用しようとするとすぐに例外がスローされます。WbSchemaDiff
非常にうまく機能します、驚きです!
pg_dump
両方のデータベースで使用し、ファイルを比較してみてください。
pg_dump
、そのためには問題ありません。大きな違いがあるpg_dump
場合は、比較できないものを比較しようとしている可能性があります。少なくともPGデータベースを比較するために。
psql -c '\x' -c 'SELECT... ORDER BY...'
代わりに使用していますがpg_dump
。
別の無料アプリ(構造のみを比較でき、データは比較できません):
DBeaver-データベースやテーブルなどを選択して相互に比較できます
私は多くのツールを評価し、次の解決策を見つけました。
スキーマの比較:
最も興味深いのは、Liquibase、Persyas、PgCodeKeeperでした。
(問題)Liquebaseは変換します:
SET DEFAULT nextval('myschema.name_id_seq'::regclass)
に
BIGSERIAL
そのため、使用が拒否されました
(問題)Persyasは、スキーマを追加して次のようにスローし始めるまでは正常に機能していました。
pyrseas_1 | TypeError: 'NoneType' object is not iterable
だから私はPgCodeKeeperが完璧に動作し、生きていることを発見しました(リリースを確認できます)。次のコマンドを使用します。
./pgcodekeeper-cli.sh -E -I ./ignore.txt \
-s "jdbc:postgresql://localhost/postgres?user=postgres&password=123" \
-t "jdbc:postgresql://localhost/postgres?user=postgres&password=123" \
-o /result/schema-diff-$(date +'%m%d%y_%H%M%S').sql
データ比較: Liquebaseを使用しようとしましたが、機能しません。Liquebaseを使用した2つのデータベースのデータの違いに関する未回答の質問で試した手順を確認できます。
だから私は別のプロジェクト SQLWorkbench / Jを見つけました。それは本当にうまく機能し、SQLでrealldiffを生成します。次のコマンドを使用します。
java -jar /sqlworkbench.jar -command="'WbDataDiff -excludeTables=$EXCLUDE_TABLES \
-referenceConnection=$REFERENCE_CONNECTION \
-targetConnection=$TARGET_CONNECTION -referenceSchema=$1 \
-targetSchema=$1 -file=$DIFF_RESULT_FILE -singleFile=true \
-includeDelete=true -ignoreMissingTarget=true ;'"
どちらのツールもオブジェクトのフィルタリングをサポートしています。本当に便利です。
移行
そして最後に、移行/バージョン追跡のためだけにLiquebaseを使用します。
私はPostgresの包括的な比較ツールに取り組んでいます。ベータ期間中は無料になります。
最初はこれは単なるスキーマ(DDL)の比較ですが、おそらくデータにも拡張します。これは、開発環境や運用などの動作も変更せずに、現在のRDBMSから移行するために多くのショップが必要とするツールだと思います。
私が今まで見た中で最高のツール https://pythonhosted.org/Pyrseas/
データベースからダンプを取得するdbtoyaml..。
A => B yamltodb ... [ステップ1で生成されたファイル]から移行を生成します。
データベース内のデータを比較するためのツールも探しています(特にRedshift DBの比較に興味がありました)。これまでのところ、私が見つけた最高のものはhttps://www.dbbest.com/products/database-compare-suite/#closeです。残念ながら、無料トライアルは1日後に期限切れになります。
2つのライブPostgreSQLデータベース(ダンプではない)、テーブルデータ、およびシーケンスを比較するツールを作成しました。かなり初期の頃ですが、私がやりたかったことを達成しました。多分それはあなたにも役立つでしょう。