このプロジェクトには巨大なdbスキーマが含まれていますが、これは時々更新されます。ユニットテストを作成する2つのpsqlスキーマが同じであるかどうかチェック
私はschema.sql
というファイルを持っています。これは現在のスキーマを持ち、patches/20160710.sql
と呼ばれ、origin.sql
という名前のファイルを持つ、すべてのパッチがあるディレクトリです。
新しいインストールを行う場合は、schema.sql
を使用します。それ以外の場合は、更新を行うときにパッチを適用します。
私は、プロダクションでスキーマを更新する前にテストを行い、ほぼすべてを自動化しました。これまでのところうまくいきます。
残念ながら私は別のものを書きましたschema.sql
とパッチで行ってください。私の単体テストは新しいデータベースに対してのみ実行されるので、テストは失敗せず、エラーを見つけました。テストサーバーにパッチを試しました。
schema.sql
というユニットテストを作成して展開し、origin.sql
に適用されたすべてのパッチで生成されたスキーマとスキーマを比較したいと思います。
私はまた、いくつかのテーブルが同じ値を持っていることを確認する必要があります。
データベースはpostgresqlで、ソフトウェアはnode.jsにあります。
テストはGitlab CIでカスタムドッカーイメージを使用して実行されるため、どの言語であれテストを行うことができます。
両方のパッチとschema.sql
はもちろんデータベースと同じ名前なので、schema.sql
を適用して何らかの方法でダンプしてから、データベースを削除してパッチから再作成し、再度ダンプして比較します結果。
このアプローチは意味をなさないか、私がやっていることを達成するためのより良い方法がありますか?
2つのデータベースをダンプして比較するにはどうすればよいでしょうか?
コマンドラインをLinuxの 'pg_dumpの<接続のためにparams 1> --schema = <比較するスキーマ> --schema-only> foo1.sql && pg_dump <接続パラメータ2> --schema = <比較するスキーマ> --schema-only> foo2.sql && diff foo1。 sql foo2.sql'。出力が空の場合、スキームは同一です。データを比較するには、 'psql -c" "> data1.txt && psql -c" "> data2.txt && diff data1.txt data2.txt'のようになります。 –
Abelisto
@Abelistoはヒントのために感謝します。 2つのスキーマが同じ名前を持つのはどうですか?テスト環境で2番目のスキーマの名前を変更するbashスクリプトを記述するのがよいでしょうか? – rpadovani
あなたはそれが単なるヒントであったと言います。どのように使用するかはあなた次第です。いずれにしても、bashとPostgreSQLのコマンドラインツールを使って、ほとんど何でもできると思います。 – Abelisto