48 lines
1.8 KiB
PL/PgSQL
48 lines
1.8 KiB
PL/PgSQL
-- 게임별 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;
|