Open3
pg-schema-diff メモ
stripe/pg-schema-diff: Go library for diffing Postgres schemas and generating SQL migrations
Postgres データベース スキーマ間の差異を計算し、ダウンタイムとロックを最小限に抑えながら、データベース スキーマをポイント A からポイント B に移動するために必要な SQL を生成します。これにより、データベースを取得して、プレーン DDL で定義された任意のスキーマに移行できます。
- sqldef の PostgreSQL 特化版
- できる事はかなり少ない
モチベーション
- go-migrate を使っていて、差分更新がしんどかった
- sqldef の考え方がとても良かった
- sqldef はいまいちしっくりこなかった
- PostgreSQL しか使わないので PostgreSQL 特化の sqldef という認識でいる
- 機能は低いがそもそもそんなに難しい事はやらない
インストール
自分が RDB を使うのは PostgreSQL かつ Go かつ sqlc (pgx/v5) 経由なので Go でできてる pg-schema-diff はとても良い。
go install github.com/stripe/pg-schema-diff/cmd/pg-schema-diff@latest
実行
plan でどんな SQL が実行されるのかを確認することができます。
pg-schema-diff plan --dsn $POSTGRES_URL --schema-dir ./db/schema
apply で実行することができます。
pg-schema-diff apply --dsn $POSTGRES_URL --schema-dir ./db/schema
--allow-hazards
ツールは、ネイティブの postgres 移行操作を使用してオンライン移行を実行し、可能な限りロックを回避しようとします。すべての移行がロックフリーになるわけではなく、ダウンタイムが必要になる場合もありますが、その場合はハザード システムが事前に警告します。シャドウ テーブルなどのステートフル オンライン移行手法はまだサポートされていません。
例えば --allow-hazards DELETES_DATA
は Deletes all rows in the table (and the table itself)
テーブルの全ての行も削除して、テーブル自体も削除します。
pg-schema-diff apply --dsn $POSTGRES_URL --schema-dir ./db/schema --allow-hazards DELETES_DATA