コメントでPostgreSQLスキーマをバージョン管理する方法は?


9

コード、ドキュメント、システム構成など、Gitでの作業のほとんどをバージョン管理しています。私の貴重な仕事はすべてテキストファイルとして保存されているので、私はそれを行うことができます。

また、Postgresデータベース用の多くのSQLスキーマを作成して処理しています。スキーマにはビュー、SQL関数が含まれており、Postgres関数はRプログラミング言語で(PL / Rを介して)作成します。

私と共同編集者が作成したチャンクスキーマをコピーして貼り付けようとしていましたが、忘れていました。コピーと過去のアクションは反復的でエラーが発生しやすくなります。

pg_dump / pg_restoreメソッドはコメントを失うため機能しません。

理想的には、現在のスキーマを1つまたは複数のファイルに抽出し、コメントを保持してバージョン管理を行うための方法が欲しいです。

コメント付きのスキーマをバージョン管理するためのベストプラクティスは何ですか?


2
質問はpsql固有のものではないと思います。あなたはSOので答えのいくつかを読んだstackoverflow.com/...?あなたのために何かがあるかもしれません。
DrColossos

@DrColossos-これらの質問のいくつかは、良い移行候補です。
CoderHawk

@DrColossosはCOMMENT ONpostgres以外の環境で使用できますか?標準SQLではないと思います。つまり、これ postgres固有である可能性があります。
xenoterracide

@xenoterracideそうです、私はデータベース自体のバージョン管理の問題についてもっと話していました
DrColossos

回答:


9

COMMENT ONさまざまなSCHEMAコンポーネントを使ってみませんか。コメントがスキーマ内にあり、ダンプされます。

COMMENTは、データベースオブジェクトに関するコメントを格納します。
コメントを変更するには、同じオブジェクトに対して新しいCOMMENTコマンドを発行します。オブジェクトごとに1つのコメント文字列のみが保存されます。コメントを削除するには、テキスト文字列の代わりにNULLを書き込みます。オブジェクトがドロップされると、コメントは自動的にドロップされます。


本当に役に立ちましたが、ベストプラクティスの回答を得たいと思っているので、まだ回答としてマークしたくありません。
Aleksandr Levchuk '28

2

スキーマをバージョン管理することは常に私にとって問題でした。私は通常、使用しているデータモデリングツールによって生成されたスキーマをバージョン管理しています。モデルはバージョン管理されています。現在のスキーマと以前のスキーマの差分を使用して、スキーマの更新に必要なパッチを作成しています。一部のモデリングツールは、使用可能なスキーマ更新スクリプトを作成します。更新スクリプトもバージョン管理されています。

スキーマを再生成するのに適した形式でスキーマをダンプすることを目的としたスクリプトをときどき見かけます。これらの1つはあなたが探しているものかもしれません。一部のモデリングツールとクエリツールは、既存のスキーマからスキーマ再生成スクリプトを作成できます。これをスクリプト化できる場合は、バージョン管理に適したファイルが提供される可能性があります。


2

以前の提案に代わる方法(またはそれらを組み合わせることができます)は、エディター(IDE)でSQLコードを記述してファイルを保存し、VCSにコミットしてから、を使用してデータベースでコードを実行しますpsql -1f。このようにして、コードは実行される前にバージョン管理されます。


「このようにして、コードは実行される前にバージョン管理されます。」そして、そうであるべきです。
Mike Sherrill 'Cat Recall'

@catcallそうですが、opsの投稿を読んでも、そうではないと思います。
ゼノテラサイド

残念ながら、私が目にしたほとんどの場所ではそうではありません。ただし、これが、テストするコードとQAが本番環境に移行するコードと同じであることを保証する唯一の方法です。「真の」データベースは、DBMSではなくVCSにあるという考えは広まっていません。
Mike Sherrill 'Cat Recall'

0

私は同様のプロジェクトで働いています。これは私の設計案です:

  1. 定期的にコメントDBオブジェクトを2週間ごとまたは1か月に2回と言います。
  2. pg_dump allを実行します(すべての小さな詳細と関係を確実に取得するためにすべてを取得します)yyyymmdd-VERSION.dumpで名前を付けます
  3. Gitを使用している場合は、大きなファイル用のプラグインを使用します
  4. リポジトリを使用しない場合は、以下の表のようなテキスト.CSV形式の単純な表を作成します。

    version | file name | date | description | 1.0 | yyyymmdd-v10.dump | yyyymmdd | new version of user table | 1.1 | backupDB-v11.dump | yyyymmdd | normalized reports tables |

  5. ファイル名で生成されたダンプのCSVファイルの関係を維持することで、何らかの形でそれらを簡単に追跡でき、すべてを完全にダンプしたため、復元が機能することを確認できます。

今日では、クラウドストレージやオンサイトストレージは、TBのデータについて話していても、それほど高価ではないはずです。最大16 TBの 700から1000 USDの怒りがいくつかあります。

最も人気のあるAWS S3のようなストレージクラウドに移行すると、$$$をさらに節約することもできます

優れた設計と組織の標準がすべてのITインフラストラクチャと資産を追跡するように定義されている場合、一度実装すると面倒なことはありませんが、比較的簡単で、構成の手間と最も重要な時間を節約できます...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.