ALTER DOMAIN

ALTER DOMAIN — 도메인 정의 바꾸기

요약

ALTER DOMAIN 이름
    { SET DEFAULT 표현식 | DROP DEFAULT }
ALTER DOMAIN 이름
    { SET | DROP } NOT NULL
ALTER DOMAIN 이름
    ADD 도메인_제약조건 [ NOT VALID ]
ALTER DOMAIN 이름
    DROP CONSTRAINT [ IF EXISTS ] 제약조건 [ RESTRICT | CASCADE ]
ALTER DOMAIN 이름
     RENAME CONSTRAINT 제약조건 TO 새제약조건
ALTER DOMAIN 이름
    VALIDATE CONSTRAINT 제약조건
ALTER DOMAIN 이름
    OWNER TO { 새소유주 | CURRENT_USER | SESSION_USER }
ALTER DOMAIN 이름
    RENAME TO 새이름
ALTER DOMAIN 이름
    SET SCHEMA 새스키마

설명

ALTER DOMAIN 명령은 도메인 정의를 바꾼다. 다음과 같은 여러 구문이 있다:

SET/DROP DEFAULT

도메인 기본값 지정 또는 삭제. 이 값은 INSERT 명령에서만 적용됨을 기억해야 한다; 이미 해당 도멘으로 저장된 자료에 대해서는 아무런 영향을 끼치지 않는다.

SET/DROP NOT NULL

도메인 NULL 값 허용 여부 지정. 해당 도메인이 NULL 값을 허용하지 않고자 할 때, SET NOT NULL 구문으로 지정한다.

ADD 도메인_제약조건 [ NOT VALID ]

CREATE DOMAIN 명령에서 사용하는 문법과 같은 형태로 해당 도메인에 새 제약 조건을 추가한다. 이렇게 하나의 제약 조건이 추가되면, 그 도메인을 사용하는 모든 칼럼을 대상으로 그 제약 조건에 유효한 값이다 모두 확인한다. 이 유효성 검사 과정을 생략하려면, NOT VALID 옵션을 사용한다; 이렇게 추가한 제약 조건은 나중에, ALTER DOMAIN ... VALIDATE CONSTRAINT 명령으로 유효성을 검사 할 수 있다. 이 추가 작업 뒤에 발생하는 insert, update 작업에서는 이 제약 조건이 NOT VALID 옵션을 사용해서 만들었다고 하더라도 유효성 검사를 항상 한다. NOT VALID 옵션은 CHECK 제약 조건에서만 제 역할을 한다.

DROP CONSTRAINT [ IF EXISTS ]

해당 도메인에 지정된 제약 조건을 뺀다. IF EXISTS 옵션을 사용하면, 해당 제약 조건이 없더라도 오류를 내지 않는다. 이때는 알림 메시지만 보여준다.

RENAME CONSTRAINT

제약 조건 이름을 바꾼다.

VALIDATE CONSTRAINT

NOT VALID 옵션으로 만든 제약 조건에 대해서, 실재 모든 자료를 대상으로 그 유효성 검사를 한다.

OWNER

해당 도메인의 소유주를 바꾼다.

RENAME

해당 도메인의 이름을 바꾼다.

SET SCHEMA

해당 스키마를 바꾼다. 도메인에 관련된 모든 제약조건도 함께 새 스키마로 바뀐다.

ALTER DOMAIN 명령은 해당 도메인 소유주만 사용할 수 있다. 스키마를 바꾸는 경우, 소유주는 새 스키마에 대해서 CREATE 권한이 있어야 한다. 소유주를 바꾸는 경우, 기존 소유주는 새 소유주의 소속원이어야 하며, 새 소유주는 해당 도메인의 스키마에 대해 CREATE 권한이 있어야 한다. (새 소유주가 그 도메인을 지우거나, 새로 만들 수 있게 하기 위함이다. 슈퍼유주는 이런 제약 사항을 무시하고 작업 할 수 있다.)

매개 변수

이름

작업 대상 도메인 이름(스키마 포함).

도메인_제약조건

새 도메인 제약 조건.

제약조건

작업할 제약 조건 이름.

NOT VALID

기존 자료에 대한 제약 조건 유효성 검사를 하지 않음.

CASCADE

해당 제약 조건을 지울 때, 그 제약 조건을 사용하는 모든 개체들도 함께 삭제한다(5.14절 참조).

RESTRICT

해당 제약 조건을 지울 때, 그 제약 조건을 사용하는 개체가 하나라도 있으면, 지우지 않는다. 이것은 기본 기능이다.

새이름

바뀔 새 도메인 이름.

새제약조건

바뀔 새 제약조건 이름.

새소유주

해당 도메인의 바뀔 새 소유주 이름.

새스키마

해당 도메인의 바뀔 새 스키마 이름.

참고

Although ALTER DOMAIN ADD CONSTRAINT attempts to verify that existing stored data satisfies the new constraint, this check is not bulletproof, because the command cannot see table rows that are newly inserted or updated and not yet committed. If there is a hazard that concurrent operations might insert bad data, the way to proceed is to add the constraint using the NOT VALID option, commit that command, wait until all transactions started before that commit have finished, and then issue ALTER DOMAIN VALIDATE CONSTRAINT to search for data violating the constraint. This method is reliable because once the constraint is committed, all new transactions are guaranteed to enforce it against new values of the domain type.

현재, ALTER DOMAIN ADD CONSTRAINT, ALTER DOMAIN VALIDATE CONSTRAINT, ALTER DOMAIN SET NOT NULL 명령은 그 도메인 구성이 복합 자료형인 경우 오류를 낸다. 이런 중첩된 값들에서 사용되는 새 제약조건 검사는 앞으로 개선 되어야 하는 기능이다.

예제

한 도메인에 NOT NULL 제약 조건 추가하는 경우:

ALTER DOMAIN zipcode SET NOT NULL;

NOT NULL 제약 조건을 빼는 경우:

ALTER DOMAIN zipcode DROP NOT NULL;

체크 제약 조건을 추가하는 경우:

ALTER DOMAIN zipcode ADD CONSTRAINT zipchk CHECK (char_length(VALUE) = 5);

체크 제약 조건을 빼는 경우:

ALTER DOMAIN zipcode DROP CONSTRAINT zipchk;

위 체크 제약 조건 이름을 바꾸는 경우:

ALTER DOMAIN zipcode RENAME CONSTRAINT zipchk TO zip_check;

도메인의 스키마를 바꾸는 경우:

ALTER DOMAIN zipcode SET SCHEMA customers;

호환성

ALTER DOMAIN 명령은 표준 SQL 구문을 따른다. 단, OWNER, RENAME, SET SCHEMA, VALIDATE CONSTRAINT 옵션은 PostgreSQL 확장 기능이다. 또한 ADD CONSTRAINT 구문에서 NOT VALID 옵션도 PostgreSQL 확장 기능이다.

관련 항목

CREATE DOMAIN, DROP DOMAIN