ALTER FOREIGN TABLE — 외부 테이블 정의 바꾸기
ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ]이름
[ * ]작업
[, ... ] ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ]이름
[ * ] RENAME [ COLUMN ]칼럼이름
TO새칼럼이름
ALTER FOREIGN TABLE [ IF EXISTS ]이름
RENAME TO새이름
ALTER FOREIGN TABLE [ IF EXISTS ]이름
SET SCHEMA새스키마
작업
자리에는: ADD [ COLUMN ]칼럼이름
자료형
[ COLLATE문자정렬규칙
] [칼럼_제약조건
[ ... ] ] DROP [ COLUMN ] [ IF EXISTS ]칼럼이름
[ RESTRICT | CASCADE ] ALTER [ COLUMN ]칼럼이름
[ SET DATA ] TYPE자료형
[ COLLATE문자정렬규칙
] ALTER [ COLUMN ]칼럼이름
SET DEFAULT표현식
ALTER [ COLUMN ]칼럼이름
DROP DEFAULT ALTER [ COLUMN ]칼럼이름
{ SET | DROP } NOT NULL ALTER [ COLUMN ]칼럼이름
SET STATISTICS정수
ALTER [ COLUMN ]칼럼이름
SET (속성옵션
=값
[, ... ] ) ALTER [ COLUMN ]칼럼이름
RESET (속성옵션
[, ... ] ) ALTER [ COLUMN ]칼럼이름
SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN } ALTER [ COLUMN ]칼럼이름
OPTIONS ( [ ADD | SET | DROP ]옵션
['값
'] [, ... ]) ADD테이블_제약조건
[ NOT VALID ] VALIDATE CONSTRAINT제약조건이름
DROP CONSTRAINT [ IF EXISTS ]제약조건이름
[ RESTRICT | CASCADE ] DISABLE TRIGGER [트리거이름
| ALL | USER ] ENABLE TRIGGER [트리거이름
| ALL | USER ] ENABLE REPLICA TRIGGER트리거이름
ENABLE ALWAYS TRIGGER트리거이름
SET WITHOUT OIDS INHERIT상위테이블
NO INHERIT상위테이블
OWNER TO {새소유주
| CURRENT_USER | SESSION_USER } OPTIONS ( [ ADD | SET | DROP ]옵션
['값
'] [, ... ])
ALTER FOREIGN TABLE
명령은 외부 테이블 정의를 바꾼다.
다음과 같은 여러 구문을 사용할 수 있다:
ADD COLUMN
CREATE FOREIGN TABLE 명령에서 사용하는 새 칼럼 정의 구문을 사용해서 새 칼럼을 추가한다. 일반 테이블의 칼럼 추가와 달리 외부 테이블의 칼럼 추가는 자료 저장 관련 어떤 작업도 일어나지 않고, 단지 테이블 정보만 바꾼다.
DROP COLUMN [ IF EXISTS ]
칼럼 삭제. 이 칼럼이 삭제 될 때 이 칼럼을 사용하는
뷰 같은 것들이 있다면, CASCADE
옵션을 사용해서
함께 지울 수 있다.
IF EXISTS
옵션을 사용하면,
해당 칼럼이 없어도 오류로 처리하지 않고, 단지 알림 메시지만
보여주고 아무런 작업을 하지 않는다.
SET DATA TYPE
외부 테이블 칼럼의 자료형을 바꾼다. 앞에서 설명한 것과 같이 자료 저장 관련 작업은 하지 않고, 단지 칼럼 속성만 바꿔, PostgreSQL에서는 그 외부 칼럼의 자료형이 여기서 지정하는 새 자료형이다고 간주하는 역할만 한다.
SET
/DROP DEFAULT
칼럼 기본값 지정 또는 삭제. 이 작업은
작업 완료 후 일어나는 INSERT
UPDATE
명령에 대해서 작동한다. 이미 있는
자료에 대해서는 적용하지 않는다.
SET
/DROP NOT NULL
칼럼 not null 속성을 바꾼다.
SET STATISTICS
ANALYZE 작업에서 수집할 통계 정보량. ALTER TABLE 명령과 같은 방법으로 사용한다.
SET ( 속성옵션
= 값
[, ... ] )
RESET ( 속성옵션
[, ... ] )
속성 옵션 바꾸기. ALTER TABLE 명령 설명서에서 자세히 소개하고 있다.
SET STORAGE
해당 칼럼에 대한 저장 방식에 대한 설정 변경. ALTER TABLE 명령 설명서에서 자세히 소개하고 있다. 해당 테이블의 외부 자료 싸개에서 이 설정값을 따로 처리하지 않는다면, 이 설정은 자료를 저장하지 않기 때문에, 별 의미가 없다.
ADD 테이블_제약조건
[ NOT VALID ]
해당 외부 테이블에 새 제약 조건을 추가한다. 문법은
CREATE FOREIGN TABLE 명령 설명서에서 다루고
있는 것과 같다. 현재는 CHECK
제약 조건만 지원한다.
일반 테이블에 제약 조건을 추가하는 것과 달리, 그 제약 조건이 올바른지
검사를 하지는 않는다. 그냥 외부 테이블의 해당 자료가
이 제약 조건을 만족해야 한다는 선언만 하는 것과 같다. (자세한 논의는
CREATE FOREIGN TABLE 명령 설명서에서 한다.)
NOT VALID
옵션은 이 제약 조건 검사를 안하도록 한다.
나중에 이 제약 조건을 다시 사용할 수 있도록 단순히 비활성화만 한다.
VALIDATE CONSTRAINT
NOT VALID
옵션이 지정된 제약 조건을
활성화 한다. 이 작업을 진행할 때, 기존 자료에 대한 제약 조건에
따른 유효성 검사는 하지 않는다. 단지 앞으로 처리되는
자료에 대해서만 유효성 검사를 한다.
DROP CONSTRAINT [ IF EXISTS ]
지정한 제약 조건을 지운다. IF EXISTS
옵션을 사용하면, 해당 제약 조건이 없어도 오류로 처리하지 않고,
알림 메시지만 보여주고, 정상 종료한다.
DISABLE
/ENABLE [ REPLICA | ALWAYS ] TRIGGER
해당 외부 테이블에 정의된 트리거 사용 여부를 바꾼다. 이 부분에 대한 설명은 ALTER TABLE 명령 설명서에서 보다 자세히 다룬다.
SET WITHOUT OIDS
oid
시스템 칼럼을 없애는 하위 호환 구문이다.
oid
시스템 칼럼이 없는 서버에는 아무런 작업도 않는다.
INHERIT 상위테이블
해당 외부 테이블을 지정한 상위 테이블에 딸린 하위 테이블로 지정한다. 테이블 상속 변경에 대한 것은 ALTER TABLE 명령 설명서에서 자세히 다룬다.
NO INHERIT 상위테이블
해당 외부 테이블과 지정한 상위 테이블 간의 종속 관계를 끊는다.
OWNER
해당 테이블의 소유주를 바꾸는 구문.
OPTIONS ( [ ADD | SET | DROP ] 옵션
['값
'] [, ... ] )
테이블이나, 특정 칼럼 옵션을
ADD
(추가), SET
(변경), DROP
(삭제)
하는 구문이다. 이 작업 방법을 지정하지 않으면, ADD
로
간주한다. 옵션 이름을 중복해서 사용 할 수 없다. (테이블 옵션과
칼럼 옵션 이름이 같은 경우는 각각의 자리에서는 같이 사용할 수 있다.)
옵션 이름과 그 값에 대한 유효성 검사는 외부 자료 싸개가 담당한다.
RENAME
RENAME
구문은 테이블 이름이나, 특정 칼럼 이름을
바꾼다.
SET SCHEMA
스키마 변경 할 때 사용하는 구문.
RENAME
, SET SCHEMA
제외한
다른 작업들은 하나의 명령에서 여러 작업을 함께 사용할 수 있다.
예를 들어, 하나의 명령으로 여러 칼럼을 추가하고, 여러 칼럼 자료형을
바꿀 수 있다.
ALTER FOREIGN TABLE IF EXISTS ...
구문을 사용하면,
해당 외부 테이블이 없어도 오류로 처리하지 않고, 알림 메시지만 보여주고
마친다.
ALTER FOREIGN TABLE
명령은 해당 외부 테이블의 소유주가
사용한다. 스키마를 바꾸는 경우, 새 스키마에 대해서
CREATE
권한이 있어야 한다.
소유주를 바꾸는 경우, 기존 사용자는 새 소유주의 직간접적으로
소속원이어야 하며, 새 소유주는 해당 스키마에 대해서
CREATE
권한이 있어야 한다. (그 사용자가
이 외부 테이블을 삭제하거나, 다시 만들 수 있어야 하기 때문이다.
이런 제약은 슈퍼유저가 작업할 때는 없다)
칼럼을 추가하거나, 칼럼 자료형을 바꾸는 경우,
사용자는 해당 자료형에 대한 USAGE
권한이 있어야 한다.
이름
작업 대상 외부 테이블 이름(스키마 이름 포함).
이 테이블 이름 앞에 ONLY
키워드를 함께 사용하면,
작업은 그 테이블에 대해서만 진행되며, 빠지만,
그 테이블과 관계된 하위 모든 테이블이 작업 대상이 된다.
선택적으로 *
문자를 테이블 이름 뒤에 지정해서
명시적으로 하위 테이블 모두 작업하라고 지정할 수도 있다.
칼럼이름
작업 대상 칼럼 이름.
새칼럼이름
바뀔 새 칼럼 이름.
새이름
바뀔 새 테이블 이름
자료형
새로 추가될 칼럼의 자료형, 또는 기존 칼럼에서 사용할 바뀔 새 자료형.
테이블_제약조건
추가할 새 테이블 제약 조건
제약조건이름
유효성 검사를 하거나, 지울 제약 조건 이름
CASCADE
칼럼이나, 제약 조건을 지울 때, 의존 관계에 있는 모든 속성 또는 개체(예: 이 테이블을 참조하는 뷰의 칼럼)를 자동으로 함께 지운다 (5.14절 참조).
RESTRICT
지우려고 하는 대상에 대한 의존 관계가 있는 개체가 있는 경우에는 작업을 중지한다. 이것이 기본 작동 방식이다.
트리거이름
활성화 또는 비활성화할 트리거 이름
ALL
해당 외부 테이블에 지정된 모든 트리거를 활성화 또는 비활성화 한다. (내부적으로 자동 지정된 트리거도 있다면, 이 작업을 하려면, 슈퍼유저 권한이어야 한다. 참고로 서버 기본 기능으로 외부 테이블에 대해서는 어떠한 내부 트리거를 만들지 않지만, 확장 기능을 사용하면 외부 테이블에 내부 트리거를 사용할 수도 있다.)
USER
시스템 내부에서 자동 지정한 트리거를 빼고, 사용자가 직접 지정한 모든 트리거를 활성화, 비활성화한다.
상위테이블
상속 관계를 맺거나 끊는다.
새소유주
해당 외부 테이블의 새 소유주 이름.
새스키마
해당 외부 테이블의 새 스키마 이름.
COLUMN
키워드는 없어도 된다.
ADD COLUMN
또는 DROP COLUMN
명령으로 칼럼을 추가하거나 뺄 때, NOT NULL
또는
CHECK
제약조건을 포함 하거나, 칼럼 자료형을 바꾸는
SET DATA TYPE
구문을 사용하는 경우,
원본 자료인 외부 서버에 있는 자료의 유효성 검사는 하지 않는다.
이 자료 유효성 검사는 사용자 몫이다.
사용 가능한 매개 변수에 대한 자세한 설명은 CREATE FOREIGN TABLE에서 다룬다.
칼럼에 not null 조건 추가:
ALTER FOREIGN TABLE distributors ALTER COLUMN street SET NOT NULL;
외부 테이블 옵션 변경:
ALTER FOREIGN TABLE myschema.distributors OPTIONS (ADD opt1 'value', SET opt2 'value2', DROP opt3 'value3');
ADD
, DROP
,
, SET DATA TYPE
구문은 SQL 표준이다.
그 외 구문은
PostgreSQL 확장 기능이다.
또한 하나의 ALTER FOREIGN TABLE
명령으로
둘 이상 조작 하는 작업을 지정 가능한 것도 확장 기능이다.
ALTER FOREIGN TABLE DROP COLUMN
구문을 이용해서
칼럼을 삭제해서 아무런 칼럼이 없는 테이블로 바꾸는 것도
확장 기능이다. 표준 SQL에서는 이를 허용하지 않는다.