에듀테크 프로젝트 대시보드
테이블 DDL
스키마를 만들고 바꾸는 문법. 운영 중 ALTER 는 어떤 락을 얼마나 잡는지가 핵심입니다.
CREATE TABLE IF NOT EXISTS logs (...);
CREATE TABLE archive (LIKE logs INCLUDING ALL); -- 구조 복사(인덱스·기본값 포함)
CREATE TABLE snapshot AS SELECT * FROM logs WHERE created_at < '2025-01-01'; -- 데이터까지
CREATE TEMP TABLE scratch (...); -- 세션 종료 시 사라짐
CREATE UNLOGGED TABLE cache (...); -- WAL 안 씀 → 빠르지만 크래시 시 비워짐ALTER TABLE users ADD COLUMN phone text;
ALTER TABLE users ADD COLUMN status text NOT NULL DEFAULT 'active'; -- PG11+ 즉시(테이블 재작성 X)
ALTER TABLE users ALTER COLUMN phone SET NOT NULL;
ALTER TABLE users ALTER COLUMN age TYPE bigint; -- 호환 타입이면 빠름, 아니면 재작성
ALTER TABLE users RENAME COLUMN phone TO phone_number;
ALTER TABLE users DROP COLUMN phone_number; -- 즉시(내부적으로 숨김 처리)SET DEFAULT 아닌 volatile 기본값 추가ADD COLUMN ... DEFAULT 는 PG11+ 에서 메타데이터만 → 빠름lock_timeout 을 걸고 시도 → 실패하면 재시도 (긴 대기 줄 방지)CREATE INDEX CONCURRENTLYNOT VALID → VALIDATE 2단계손으로 ALTER 를 치지 말고 Alembic 같은 마이그레이션 도구로 버전 관리하세요. FastAPI + Alembic 은 FastAPI 레퍼런스 참고.