GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

djrobstep

migra – diffと似ていますが、PostgreSQLのスキーマは

投稿日:

diffと似ていますが、PostgreSQLのスキーマは https://migra.djrobstep.comです

migra:PostgreSQLの移行はほとんど無痛化しました

migraはPostgreSQL用のスキーマ差分ツールです。 これを使用してデータベーススキーマを比較したり、移行スクリプトを自動生成したりできます。 あなたのpythonスクリプトで、またはコマンドラインから以下のように使用してください:

$ migra postgresql:///a postgresql:///b
alter table "public"."products" add column newcolumn text;

alter table "public"."products" add constraint "x" CHECK ((price > (0)::numeric));

migraは、AからBに向かうために必要なすべてのステートメントを魔法のようにmigraます。

--schema myschema--schema myschemaすると、単一の特定のスキーマの変更を検出することもできます。

すでにmigra使用してmigraますか? どのように使用しているのか、どんな機能によってより便利になるのか教えてください

フォーク、スキーマは良いです

スキーマの移行は、間違いなくSQLデータベースを扱う際に最も面倒で迷惑な作業です。 そんなに多くの人々がスキーマ自体が悪いと思うように!

しかし、スキーマは実際には良いです。 データの一貫性と構造を強制することは良いことです。 それは、使用するのが難しいため、悪いマイグレーションツールです。 migraはそれを変えようとするものであり、恐怖を感じるのではなく、移行を簡単に、安全に、そして信頼できるものにしています。

MigraはPostgreSQL> = 9.4をサポートしています。 以前のバージョンでは既知の問題があります。

完全なドキュメント

ドキュメンテーションはmigra.djrobstep.comにあります。

使い方

migraをスキーマの差分ツールと考えてください。 データベースAとデータベースBが類似しているがわずかに異なるスキーマを持っているとします。 migramigraを検出し、AをBに変換するために必要なSQLを出力します。

これには、表、ビュー、関数、索引、制約、列挙、シーケンス、およびインストール済み拡張の変更が含まれます。

また、 migraをライブラリーとして使用して、独自のマイグレーション・スクリプト、ツール、およびカスタム・マイグレーション・フローを構築することもできます。

migraでは、典型的なデータベースの移行は簡単な3ステップのプロセスです。

  1. 自動生成:

     $ migra --unsafe postgresql:///a postgresql:///b > migration_script.sql
    
  2. レビュー(必要に応じて調整)。

     # If you need to move data about during your script, you can add those changes to your script.
    
  3. 適用:

     $ psql a --single-transaction -f migration_script.sql
    

移行が完了しました!

重要:安全な移行を実践してください

移行は完全に自動化することはできません 上記のように、移転表を注意深く検討してください特に、脱落表が含まれている場合があります。

Migraはスキーマの変更を管理しますが、データは管理しません データを移動する必要がある場合は、移行の一環として、スキーマを変更する前または後に別々にスクリプトを編集するか、スキーマを変更することで対応する必要があります。

まず、本番データベースのコピーに対してマイグレーションを実行することをお勧めします。 これにより、本番データベースで中断や停止が発生する前に、正確性の検証やパフォーマンス上の問題の発見に役立ちます。

生成された文に「drop」という語が含まれる場合、 migraは意図的にエラーをスローします。 この安全機能は決して馬鹿ではありませんが、いくつかの明白な破損を防ぐかもしれません。

“drop …”文を生成する場合は、コマンドを使用する場合は--unsafeフラグを使用するか、pythonパッケージを直接使用する場合はset_safety( Migrationオブジェクトの場合はfalse)にする必要があります。

Pythonコード

migraコマンドがフードの下でどのように実装されているか(いくつか無関係な行が削除されている)

ご覧のとおり、シンプルです(ここでは、データベースURLからデータベースセッションを作成するコンテキストマネージャがあります)。

from migra import Migration
from sqlbag import S

with S(args.dburl_from) as s0, S(args.dburl_target) as s1:
    m = Migration(s0, s1)

    if args.unsafe:
        m.set_safety(False)

    m.add_all_changes()
    print(m.sql)

ここでコードは、分析するMigrationオブジェクトの両方のデータベースへの接続を開きます。 m.add_all_changes()は、必要な変更のSQL文を生成し、移行オブジェクトの保留中の変更のリストに追加します。 必要なSQLをプロパティとして使用できるようになりました。

機能と制限

migraは拡張機能をうまく使います。 拡張機能に属するスキーマのコンテンツは無視され、管理する拡張機能に残ります。

New: migraはビューの依存関係もうまくmigraていて、正しい順序で削除/作成します。

これまでSQL / PLPGSQL関数のみが動作することが確認されています。 migraは他の言語を使用する関数を無視します。

インストール

pipがあれば、次のようにインストールするだけです。

$ pip install migra

psycopg2-binary(PostgreSQLドライバ)がまだインストールされていない場合は、次のコマンドを使って同時にインストールすることができます。

$ pip install migra[pg]

貢献する

貢献は簡単です。 問題飛びついたり、取り組んでいる機能や修正を見つけたり、関わったりしてください。 または、新しい問題を作成し、全く異なるものを提案してください。 初心者に優しい問題には「良い最初の問題」とタグ付けされています。プロセスのどの側面についてもわからない場合は、尋ねてください。







-djrobstep
-

執筆者: