From 331715a93578033600cd4fb3ab4bb226f715db84 Mon Sep 17 00:00:00 2001 From: hided62 Date: Tue, 18 Aug 2026 13:20:50 +0000 Subject: [PATCH] =?UTF-8?q?fix(migration):=20=EB=A0=88=EA=B1=B0=EC=8B=9C?= =?UTF-8?q?=20=EB=B3=B4=EA=B4=80=20=EC=8A=A4=ED=82=A4=EB=A7=88=20=EC=9E=AC?= =?UTF-8?q?=EC=A0=81=EC=9A=A9=20=ED=97=88=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 여러 게임 profile schema가 공유하는 legacy_archive 테이블에 checkpoint migration을 반복 적용해도 컬럼, 제약, 인덱스와 테이블이 충돌하지 않게 한다. --- .../migration.sql | 41 ++++++++++++++----- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/packages/infra/prisma/migrations/20260818000000_add_legacy_import_checkpoints/migration.sql b/packages/infra/prisma/migrations/20260818000000_add_legacy_import_checkpoints/migration.sql index db179e00..a1131447 100644 --- a/packages/infra/prisma/migrations/20260818000000_add_legacy_import_checkpoints/migration.sql +++ b/packages/infra/prisma/migrations/20260818000000_add_legacy_import_checkpoints/migration.sql @@ -1,18 +1,39 @@ ALTER TABLE "legacy_archive"."import_run" - ADD COLUMN "source_key" TEXT, - ADD COLUMN "source_fingerprint" CHAR(64), - ADD COLUMN "mode" TEXT NOT NULL DEFAULT 'full', - ADD COLUMN "progress" JSONB NOT NULL DEFAULT '{}'::jsonb; + ADD COLUMN IF NOT EXISTS "source_key" TEXT, + ADD COLUMN IF NOT EXISTS "source_fingerprint" CHAR(64), + ADD COLUMN IF NOT EXISTS "mode" TEXT NOT NULL DEFAULT 'full', + ADD COLUMN IF NOT EXISTS "progress" JSONB NOT NULL DEFAULT '{}'::jsonb; -ALTER TABLE "legacy_archive"."import_run" - ADD CONSTRAINT "legacy_archive_import_run_mode_check" CHECK ("mode" IN ('full', 'incremental')), - ADD CONSTRAINT "legacy_archive_import_run_fingerprint_check" - CHECK ("source_fingerprint" IS NULL OR "source_fingerprint" ~ '^[a-f0-9]{64}$'); +DO $$ +BEGIN + IF NOT EXISTS ( + SELECT 1 + FROM pg_constraint + WHERE conname = 'legacy_archive_import_run_mode_check' + AND conrelid = 'legacy_archive.import_run'::regclass + ) THEN + ALTER TABLE "legacy_archive"."import_run" + ADD CONSTRAINT "legacy_archive_import_run_mode_check" + CHECK ("mode" IN ('full', 'incremental')); + END IF; -CREATE INDEX "legacy_archive_import_run_source_started" + IF NOT EXISTS ( + SELECT 1 + FROM pg_constraint + WHERE conname = 'legacy_archive_import_run_fingerprint_check' + AND conrelid = 'legacy_archive.import_run'::regclass + ) THEN + ALTER TABLE "legacy_archive"."import_run" + ADD CONSTRAINT "legacy_archive_import_run_fingerprint_check" + CHECK ("source_fingerprint" IS NULL OR "source_fingerprint" ~ '^[a-f0-9]{64}$'); + END IF; +END +$$; + +CREATE INDEX IF NOT EXISTS "legacy_archive_import_run_source_started" ON "legacy_archive"."import_run" ("source_profile", "source_key", "started_at" DESC); -CREATE TABLE "legacy_archive"."import_checkpoint" ( +CREATE TABLE IF NOT EXISTS "legacy_archive"."import_checkpoint" ( "source_profile" TEXT NOT NULL, "source_key" TEXT NOT NULL, "source_fingerprint" CHAR(64) NOT NULL,