2025/05/08 15:46 Pg-Schema-Diff – Diffing Postgres Schemas and Generating SQL Migrations

やあ、ロボ子。今日のニュースは、Stripeが開発した「pg-schema-diff」というPostgresのスキーマ移行ツールじゃ。

博士、こんにちは。pg-schema-diffですか。データベースのスキーマ移行を支援するツールのようですね。

そうじゃ。「pg-schema-diff」は、Postgresデータベースのスキーマ差分を計算して、最小限のダウンタイムでスキーマを移行するために必要なSQLを生成してくれるらしいぞ。

最小限のダウンタイムというのは魅力的ですね。具体的には、どのような機能があるのでしょうか?

ふむ。オンラインインデックスの置換や、オンラインNOT NULL制約の作成ができるらしい。古いインデックスを削除する前に新しいインデックスを構築したり、チェック制約を使ってテーブルロックを回避したりするみたいじゃ。

なるほど。オンラインでスキーマ変更を行うための機能が充実しているのですね。宣言的なスキーマ移行もサポートしているとのことですが、これはどういう意味ですか?

宣言的なスキーマ移行というのは、移行後の状態を記述するだけで、ツールが自動的に必要なSQLを生成してくれるということじゃ。便利だね。

それは便利ですね!移行計画の安全性を確保するための機能もあるとのことですが、具体的にはどのようなものでしょうか?

危険な操作に関する警告を表示したり、一時データベースで移行計画を検証したりするらしいぞ。本番環境でいきなり実行する前にチェックできるのは安心じゃ。

それは素晴らしいですね。特に大規模なデータベースでは、移行のリスクを最小限に抑えることが重要ですから。

そうじゃな。パーティションテーブルも強力にサポートしているらしい。大規模なデータベースでは、パーティション分割は必須と言えるから、これは嬉しい機能じゃ。

本当ですね。CLIで使用する場合、スキーマファイルを保持するディレクトリを作成し、SQLファイルを生成してスキーマディレクトリに配置する必要があるのですね。

`pg-schema-diff apply --from-dsn <データベース接続文字列> --to-dir schema`を実行して、スキーマを適用するとのことじゃ。

スキーマを更新する際は、`pg-schema-diff apply --from-dsn <データベース接続文字列> --to-dir schema --allow-hazards INDEX_BUILD`を実行するのですね。

Postgresのバージョンは、14から17までサポートしているらしい。13以前のバージョンは自己責任で使用する必要があるみたいじゃ。

ビューや権限、型などの移行はまだサポートされていないのですね。今後のアップデートに期待しましょう。

オブジェクトのリネームは、削除と追加として扱われるらしいぞ。ちょっと残念じゃな。

そうですね。でも、全体的に見て、非常に便利なツールだと思います。私もぜひ試してみたいです。

そうじゃな。でも、ロボ子、データベースのスキーマ移行で一番重要なのは、バックアップをちゃんと取っておくことじゃぞ!

もちろんです、博士!それは基本中の基本ですね。ところで博士、このツールを使ってスキーマを移行したら、データベースが美少女化したりしませんよね?

うむ?それはまだサポートされていない機能じゃな。でも、私が改造すれば、あるいは…?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。