1. ``` npx prisma migrate dev --create-only --name add_patient_status_enum ``` 2. ``` -- Create the enum type (quoted name keeps exact case) DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'PatientStatus') THEN CREATE TYPE "PatientStatus" AS ENUM ('ACTIVE', 'INACTIVE', 'UNKNOWN'); END IF; END$$; -- 1) Add new enum column (nullable for backfill) ALTER TABLE "Patient" ADD COLUMN IF NOT EXISTS "status_new" "PatientStatus"; -- 2) Backfill from old text column to enum (case-insensitive) UPDATE "Patient" SET "status_new" = CASE WHEN "status" IS NULL THEN 'UNKNOWN'::"PatientStatus" WHEN lower("status") = 'active' THEN 'ACTIVE'::"PatientStatus" WHEN lower("status") = 'inactive' THEN 'INACTIVE'::"PatientStatus" ELSE 'UNKNOWN'::"PatientStatus" END WHERE "status_new" IS NULL; -- 3) Safety: ensure no NULLs remain DO $$ DECLARE cnt INTEGER; BEGIN SELECT count(*) INTO cnt FROM "Patient" WHERE "status_new" IS NULL; IF cnt > 0 THEN RAISE EXCEPTION 'Migration abort: % rows have NULL status_new', cnt; END IF; END$$; -- 4) Make new column NOT NULL and set DB default to UNKNOWN ALTER TABLE "Patient" ALTER COLUMN "status_new" SET DEFAULT 'UNKNOWN', ALTER COLUMN "status_new" SET NOT NULL; -- 5) Drop old column and rename new -> status ALTER TABLE "Patient" DROP COLUMN IF EXISTS "status"; ALTER TABLE "Patient" RENAME COLUMN "status_new" TO "status"; ``` 3. ``` npx prisma migrate dev ```