-- 게임별 WebGL 기준 화면 크기. 앱 배포 전에 대상 스키마에 적용한다. -- search_path는 실행자가 대상(dev/live/격리 테스트) 스키마로 명시한다. -- 앱 자동 적용 없음. 기존 행 변경/백필 없음. 재실행 가능. -- 롤백: 이전 앱 버전으로 복귀해도 nullable 컬럼은 유지 가능하다. -- 컬럼/제약 삭제는 별도 승인 후 수행한다. BEGIN; ALTER TABLE "games" ADD COLUMN IF NOT EXISTS "display_width" integer, ADD COLUMN IF NOT EXISTS "display_height" integer, ADD COLUMN IF NOT EXISTS "display_source" character varying(16); DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_constraint WHERE conrelid = 'games'::regclass AND conname = 'games_display_dimensions_check' ) THEN ALTER TABLE "games" ADD CONSTRAINT "games_display_dimensions_check" CHECK ( ("display_width" IS NULL AND "display_height" IS NULL) OR ( "display_width" IS NOT NULL AND "display_height" IS NOT NULL AND "display_width" BETWEEN 1 AND 16384 AND "display_height" BETWEEN 1 AND 16384 AND "display_width"::bigint <= "display_height"::bigint * 32 AND "display_height"::bigint <= "display_width"::bigint * 32 ) ); END IF; IF NOT EXISTS ( SELECT 1 FROM pg_constraint WHERE conrelid = 'games'::regclass AND conname = 'games_display_source_check' ) THEN ALTER TABLE "games" ADD CONSTRAINT "games_display_source_check" CHECK ( "display_source" IS NULL OR "display_source" IN ('build-info', 'css', 'canvas', 'manual', 'unknown') ); END IF; END $$; COMMIT;