PostgreSQLの2つのデータベース間でデータを比較する方法は?
-
24-10-2019 - |
質問
2つのデータベースを同じ構造と比較することは可能ですか?たとえば、2つのデータベースDB1とDB2があり、それらの間にデータに違いがあるかどうかを確認したいと思います。
解決
そこにはいくつかのツールがあります:
(これらのツールのほとんどは構造のみを比較できるが、データは比較できないことに注意してください)
無料のもの:
- pgquarrel: http://eulerto.github.io/pgquarrel
- apgdiff: http://apgdiff.com/
- リキバーゼ(Cross DBMS): http://www.liquibase.org
- wbschemadiff(Cross DBMS): http://www.sql-workbench.net/manual/compare-commands.html
- ミグラ: https://migra.djrobstep.com/
商業:
- DB比較: http://www.sqlmanager.net/en/products/postgresql/dbcomparer
- Aqua Data Studio: http://docs.aquafold.com/docs-diff-schema.html
- DBソロ: http://www.dbsolo.com/index.html (30日間の試験)
- PostgresCompare: https://www.postgrescompare.com/
他のヒント
使用してみてください pg_dump
両方のデータベースとファイルの違い。
別の無料アプリ(それ 構造のみを比較できますが、データは比較できません):
dbeaver - データベース、テーブルなどを選択して、互いに比較できます
Postgresの包括的な比較ツールに取り組んでいます。ベータ版にいる間は無料になります。
最初はこれは単なるスキーマ(DDL)比較ですが、おそらくデータにも拡大するでしょう。これは、多くのショップが、開発環境、操作などを変更することもなく、現在のRDBMSから移動するために必要なツールだと思います。
私は多くのツールを評価し、次の解決策を見つけました。
スキーマ比較:
最も興味深いのは、リキバーゼ、ペルシャス、PGCodeKeeper:
(問題)リキューベース変換:
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を使用した2つのデータベースのデータの違いについて
だから私は別のプロジェクトを見つけました SQLワークベンチ/jそれは本当にうまく機能し、SQLでReall Diffを生成します。次のコマンドを使用します。
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を使用します。
私が今まで見た中で最高のツールhttps://pythonhosted.org/pyrseas/
データベースからダンプを入手してくださいadbtoyaml ...
a => b yamltodbからの移行を生成... [ステップ1で生成されたファイル
また、データベースのデータを比較するツールも探しています(特に、Redshift DBを比較することに興味がありました)。これまでのところ、私が見つけたのは最高です https://www.dbbest.com/products/database-compare-suite/#close。残念ながら、無料の裁判は1日後に期限切れになります。