マイグレーションと型
スキーマの変更をバージョン付きの SQL として適用・記録する方法、スキーマを SQL でダウンロードする方法、supabase-js 用の TypeScript 型の作り方。
マイグレーションと型
スキーマを変更する SQL をバージョン付きのファイルとして残しておくと、同じ変更をほかのプロジェクト(ステージング → 本番)に
同じ順序で適用し直せます。run_sql で変更したものは記録が残りません。
list_migrations 適用したマイグレーションのバージョン・名前・時刻(古い順)
apply_migrations まだ適用していないものだけをバージョン順に実行し、記録します
remove_migration_record 記録を1つ削除します(作られたものはそのまま)
dump_schema 今のスキーマを作り直せる SQL として
generate_typescript_types supabase-js の Database 型適用のされ方
- マイグレーション1つがトランザクション1つです。失敗すると、そのマイグレーションだけをまるごと元に戻して止まります。
- バージョンは数字で(通常は
YYYYMMDDHHMMSS)、数値の大きさの順に実行します。すでに記録されたバージョンは飛ばします。 - すでに適用された最後のバージョンより前のバージョンが新しく来ると拒否します。あとから統合したブランチなら
include_all: trueです。 - 記録されたあとで内容が変わったファイルは再実行せず、
driftedとして知らせます。直すには新しいマイグレーションを書いてください。 run_sqlと同じ権限(書き込みトークン、オーナー・管理者・開発者)で、プロジェクトの service_role として実行します。- データスキーマが search_path の先頭にあるため、
create table notes (...)のように名前だけを書けば十分です。
記録はどこに
プロジェクトの oneend_migrations テーブルです。オーナーは SQL で読めます。RLS が有効でルールがないため、公開キーでは見えません。
supabase_migrations.schema_migrations と同じ役割です。
スキーマをファイルに、型をコードに
dump_schema は、型・シーケンス・テーブルと制約・外部キー・インデックス・関数・ビュー・トリガー・RLS とルールを SQL で返します。
既存のプロジェクトをマイグレーションで管理し始めるときは、これを最初のマイグレーションとして保存し、
apply_migrations に record_only: true を付けて記録だけを残してください。実行すると、すでにあるテーブルとぶつかります。
generate_typescript_types は supabase gen types typescript と同じ形(Tables の Row/Insert/Update/Relationships、
Views、Functions の Args/Returns、Enums、CompositeTypes)を返します。スキーマ名は public です。
同じことを HTTP で
GET /projects/<ref>/migrations
POST /projects/<ref>/migrations {migrations: [{version, name, sql}], include_all, record_only, dry_run}
DELETE /projects/<ref>/migrations/<version>
GET /projects/<ref>/schema {sql, objects}
GET /projects/<ref>/types/typescript?schema=public {types}