mizuko約1時間後 00Atlasマイグレーションで既存インデックスを制約に変換する方法PostgreSQLAtlasAtlasがUNIQUE INDEXをUNIQUE CONSTRAINTに変換する際、ADD CONSTRAINT ... UNIQUE USING INDEX ...構文を生成する。 この構文は既存インデックスを制約に変換するもので、インデックスが存在しないとエラーになる。 環境によってインデックスの有無が異なる場合、PL/pgSQLで条件分岐する: DO $$ BEGIN -- インデックスがあれば制約に変換 IF EXISTS (SELECT 1 FROM pg_indexes WHERE indexname = 'index_name') THEN ALTER TABLE "table" ADD CONSTRAINT "constraint_name" UNIQUE USING INDEX "index_name"; -- 制約もなければ新規作成 ELSIF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'constraint_name') THEN ALTER TABLE "table" ADD CONSTRAINT "constraint_name" UNIQUE ("column1", "column2"); END IF; END $$;