`ALTER TYPE` — 데이터 타입 정의 변경
ALTER TYPE — 데이터 타입 정의 변경
기존 데이터 타입의 이름이나 소유자, 스키마를 바꾸거나, 열거형(enum) 값·속성·속성 옵션을 조정하고 싶을 때 쓰는 명령이 ALTER TYPE이에요.
출처: PostgreSQL 문서
본문
ALTER TYPE은 기존 데이터 타입의 정의를 변경해요. 타입의 소유자여야 이 명령을 쓸 수 있어요.
Synopsis (개요)
ALTER TYPE name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER TYPE name RENAME TO new_name
ALTER TYPE name SET SCHEMA new_schema
ALTER TYPE name ADD VALUE [ IF NOT EXISTS ] new_enum_value [ { BEFORE | AFTER } neighbor_enum_value ]
ALTER TYPE name RENAME VALUE old_enum_value TO new_enum_value
ALTER TYPE name RENAME ATTRIBUTE attribute_name TO new_attribute_name [ CASCADE | RESTRICT ]
ALTER TYPE name ALTER ATTRIBUTE attribute_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ CASCADE | RESTRICT ]
ALTER TYPE name ALTER ATTRIBUTE attribute_name SET ( { attribute_option = value } [, ... ] )
ALTER TYPE name ALTER ATTRIBUTE attribute_name RESET ( { attribute_option } [, ... ] )
ALTER TYPE name ALTER ATTRIBUTE attribute_name SET DEFAULT expression
ALTER TYPE name ALTER ATTRIBUTE attribute_name DROP DEFAULT
ALTER TYPE name ALTER ATTRIBUTE attribute_name SET NOT NULL
ALTER TYPE name ALTER ATTRIBUTE attribute_name DROP NOT NULL
Description (설명)
ALTER TYPE은 기존 데이터 타입의 정의를 변경해요. 여러 형태가 있어요.
OWNER TO— 타입의 소유자를 변경해요. 새 소유자가 되어야 하므로, 변경하려면 새 소유자 역할로SET ROLE할 수 있어야 해요. (슈퍼유저는 자동으로 이 권한을 가져요.)RENAME TO— 타입의 이름을 변경해요. 타입을 사용하는 기존의 다른 데이터베이스 객체(테이블, 함수 등)는 자동으로 새 이름을 따르게 돼요.SET SCHEMA— 타입을 새 스키마로 이동해요. 타입에 종속된 객체들(예: 연산자, 함수)도 함께 이동할 수도 있어요.ADD VALUE— 열거형 타입에 새 값을 추가해요. 값의 정렬 위치는BEFORE/AFTER로 이웃 값을 지정해 정할 수 있어요.IF NOT EXISTS를 쓰면 이미 값이 있어도 오류 대신 알림만 내요. (단, 이미 시작된 트랜잭션 안에서는 열거형 값 추가가 불가능한 제약이 있어요.)RENAME VALUE— 열거형 타입의 기존 값을 새 이름으로 바꿔요.RENAME ATTRIBUTE/ALTER ATTRIBUTE— 복합(composite) 타입 속성의 이름·타입·옵션·기본값·null 허용 여부를 변경해요.CASCADE는 종속 객체까지 자동으로 변경하도록 하고,RESTRICT는 종속 객체가 있으면 거부해요.
하위 호환성 참고
ADD VALUE는 트랜잭션 블록 안에서 실행될 수 없고, 추가된 값을 사용해도 그 값은 같은 트랜잭션에서 다시 읽을 수 없어요는 제약이 있어요. 그러나 값 추가 후 커밋되면 다른 세션에서 즉시 사용할 수 있어요.
Compatibility (호환성)
ALTER TYPE 문(SQL 표준의 ALTER DOMAIN·일반 타입 목적)은 대부분 PostgreSQL 확장이에요. SQL 표준에는 ALTER TYPE이 없어요.
더 알아보기 (Learn more)
- 타입을 만드는
CREATE TYPE와 삭제하는DROP TYPE를 함께 확인해요.