データベースを比較する方法は?


1

meld同じRDBMSの2つの異なるデータベースからの2つのダンプを使用してみましたが、これらのダンプは標準ではないため比較できないようです。

私はpg_dump ...(標準)とpg_dump -a ...(データのみ)の両方を試しましたが、どちらも標準的ではないようで、それほど違いはありませんが、左右の違いは多くの誤検知を示しています。

pg_dump成功せずに適用可能なオプションを検索しましたが、おそらく特別なツールが必要ですか?


私が作業したすべてのdbプラットフォームには、この目的のために外部ユーティリティが必要でしたが、Postgreはおそらく違いはありません。これを確認してください:devart.com/dbforge/postgresql/datacompare
フランクトーマス

わかりましたが、pg_dumpメンテナーにとって標準出力のオプションを追加することは大したことではないでしょう。場合はmeldOKであり、それは、それはそれを活用しようとしている自然なアプローチではないでしょうか?
uprego

回答:


1

最も簡単な解決策はかなり手動です。

  1. スキーマ名とテーブル名をダンプします。
  2. スキーマとテーブル名をループし、それぞれを同じファイルまたはテーブルごとのファイルに順番にダンプします(一意の順序を与える一連の列で順序付けを行います)。
  3. 他のデータベースについても繰り返します。

これにより、簡単に比較可能な出力が得られます。


私はそれが好きで、ある時点で試してみると確信しています。ただし、スキーマが比較できるかどうかはわかりません(何百ものテーブルと制約のミュータントスキーマです)が、ORDER BYまたは何かをdump命令に渡すというアイデアはとても気に入っています。それは例えば、また、バイナリ/ BASE64 / blobカラムを省略するために追加のステップを必要とされるであろうが、それを符号化するための代替手段があるはずawksedPythonは、。
uprego 14年

1
バイナリまたは他の過度に長い列のチェックサムを取得するだけです。少なくとも、値が異なるかどうかを確実に判断できます。
l0b0 14年

各テーブル(「^ COPY」と「^ \\。」に一致する行間の行)を実行し、残りのすべての情報をそのままコピーする外部スクリプト以外で行を並べ替える方法がわかりません。pg_dumpテキストダンプ。
uprego 14年

order by 1, 2, 3, [etc]すべての列で単純に並べ替えることができます。
l0b0 14年

私はpg_dump... だけを使用することを考えていましたが、比較ツールでdirtreesをサポートしていれば、を使用してテーブルの内容を単一のファイルにダンプしても大丈夫ですpsql。ただし、バイナリチェックサムがスクリプトオプションになり、単一のファイルを持つことが可能になり、バイナリ列がチェックサムされなかった場合はいつでもその単一のファイルを復元できるように、そのアプローチを使用しないようにします。私はできるだけ早く何かを開発しようとしています...
uprego 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.