PostgreSQL:スキーマdiff / patchツール[終了]


14

次の設定を考慮してください。

  • 実動DB
  • 新しい機能を有効にするためにスキーマの変更が行われるdev db

新しい機能の開発が完了したら、pg_dump --schema-only両方のDBが同一になるまでprod dbスキーマを手動で更新する必要があります。このプロセスはエラーが発生しやすく、面倒です。

だから、私はできるツールを探しています:

  • 2つのスキーマの違いの要約を表示しdiffます(など)。スキーマの単なるテキストの差分を探しているのではなく、「Table Xhas a new column Y」のような結論を導き出すことができるより精巧なツールを探していることに注意してください。
  • あるスキーマを別のスキーマに変換するSQLコードを自動生成します(などpatch

prodスキーマをより高度なdevスキーマに変換するのに役立つスキーマdiff / パッチツールはありますか?


2
diffを実行するのではなく、移行スクリプトを管理された方法で管理する必要があります。DBMSに対してアドホックDDLの変更を決して行わず、常に変更をスクリプト(バージョン管理システムに格納されている)に入れてから、スクリプトを適用します。LiquiBaseをまたはフライウェイのようなツールを検討
a_horse_with_no_name

1
@a_horse_with_no_nameありがとう。このアプローチを使用しても、diff / patchツールは私の生活を楽にします。ところで、私は歌を口ずさむことは仕方がない。
アダムマタン

pg_comparatorを試してみてください:pgfoundry.org/projects/pg-comparator(使用したことはありません)。LiquiBaseをも同様に差分を内蔵しており、私はより多くの制御スキーマ管理のための出発点は良いかもしれません間違えそうじゃない場合LiquiBaseをチェンジセットとして結果を発した
a_horse_with_no_name

ありがとう。投票できるように、回答として投稿してください。
アダムマタン

回答:


11

古い質問を復活させてすみません

最近、JetBrainsの0xDBE DataGripデータベース管理ツールを使用しています。

優れたJetbrains IDEで複数のデータベースエンジンをサポートしており、diff2つのテーブル(DEVとPROD)を使用できることが重要な機能です。

以下に、実際の差分のスクリーンショットを示します(この場合、列の違いは1つだけです)。スクリーンショットは、上部の「右にマージ」ボタンの結果であり、正しいテーブルを最初から起動するために必要なSQLを生成します。

0xDBE SQLテーブル差分

この新しいツールがお役に立てば幸いです。


3
古い質問を復活させることに問題はありません(そこから達成するバッジさえあります)。そして質問:データベース全体(少なくとも、データベース内のすべてのテーブルを意味する)を比較することは可能ですか?
dezso

@dezso-安心していただきありがとうございます。はい、データベース、スキーマ、およびテーブルレベルで比較できます。
ユアン14年

0xDBEでdiff機能を開始するにはどうすればよいですか?「diff」ツールのメニュー項目が見つかりません。
バジルブルク

1
@BasilBourque -左側からDatabaseメニュー、あなたは(と比較したい2つのテーブルを選択cmd/ctrl + click)、右クリックし、[プロパティ]を選択Compare
ユアン

2
私は最近、Pythonで書かれた新しいツールmigraに出会いました。テーブル、ビュー、関数、インデックス、制約、列挙、シーケンス、およびインストールされた拡張機能への変更に対する変更を追跡でき、ライブラリとしても使用できます
スクリプト

6

liquibaseを使用します

diffをサポートし、データベースをゼロから生成し、データベースにパッチを適用し、データベースをロールバックし、その他の多くのものをサポートします。

以前は、liquibaseを使用してXMLですべてを記述する必要がありましたが、それ以上ではありません。選択したSQL方言でその99%を書くことができます。例:

--liquibase formatted sql

--changeset neil:1 

create table contacts(
  contact_id serial primary key,
  name text not null unique
);

--changeset neil:2
alter table contacts add column phone_num text;

liquibaseの変更ログをgitまたはwhat-have-youに保存する必要があります。


これに関する問題は、制約と主キーの順序付けや削除が正しく行われないことです。
僧ks

2
フライウェイは、 LiquiBaseをに似て、別の選択肢です。
バジルブルク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.