Atlas Community 版は PostgreSQL 拡張を管理できない — CREATE EXTENSION の運用パターン
PostgreSQL
Atlas
マイグレーション
Atlas(Community 版)で宣言的スキーマから migration を差分生成する構成では、desired schema に CREATE EXTENSION を含めると「extensions are available to logged-in users only」エラーになる(拡張管理は Pro 機能)。pgvector など拡張前提の型を使う場合は次のパターンで回避する。
運用パターン:
- 拡張の作成は自動生成の対象から外し、手書き migration(
CREATE EXTENSION IF NOT EXISTS ...)として migration ディレクトリに追加する。タイムスタンプは後続の自動生成 migration より古くする。 - desired schema(schema.sql 等)には拡張を含めない。Community 版は拡張を inspect しないため、DB 側にだけ拡張が存在しても drift とは判定されず、以後の差分生成と共存できる。
- golang-migrate 形式を使っている場合、手書きファイル追加後に
atlas migrate hashで atlas.sum を更新しないと整合性エラーになる。
dev database への配慮: Atlas は差分計算用の dev database に migration と desired schema を replay するため、拡張型のカラム(例: vector(768))を解決するには dev DB 側でも拡張が使える必要がある。手書き migration が replay されるので通常は揃うが、新規環境向けには DB コンテナの initdb スクリプト(/docker-entrypoint-initdb.d/)でも拡張を作成しておくと確実。既存ボリュームには initdb が走らない点に注意し、一度だけ手動で CREATE EXTENSION を実行する。
検証方法: 手書き migration 追加 → 差分生成 → 適用 → もう一度差分生成して「no changes to be made」になれば、自動生成パイプラインと衝突していない。