`ALTER VIEW` — 뷰 정의 변경
ALTER VIEW — 뷰 정의 변경
뷰의 이름이나 소유자, 스키마, 열 기본값, 뷰 옵션 같은 보조 속성을 바꾸고 싶을 때 쓰는 명령이 ALTER VIEW예요. (뷰를 정의하는 쿼리 자체를 바꾸려면 CREATE OR REPLACE VIEW를 사용해요.)
출처: PostgreSQL 문서
본문
ALTER VIEW는 뷰의 다양한 보조 속성을 변경해요. 뷰의 정의 쿼리를 수정하려면 CREATE OR REPLACE VIEW를 사용해요.
ALTER VIEW를 사용하려면 뷰의 소유자여야 해요. 뷰의 스키마를 변경하려면 새 스키마에 대한 CREATE 권한도 있어야 해요. 소유자를 변경하려면 새 소유자 역할로 SET ROLE할 수 있어야 하고, 그 역할은 뷰의 스키마에 대한 CREATE 권한을 가져야 해요. (이 제한들은 소유자 변경이 뷰를 삭제하고 다시 만드는 것으로도 할 수 있는 것 이상을 하지 못하도록 보장해요. 다만 슈퍼유저는 어쨌든 어떤 뷰의 소유권도 변경할 수 있어요.)
Synopsis (개요)
ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name SET DEFAULT expression
ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name DROP DEFAULT
ALTER VIEW [ IF EXISTS ] name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER VIEW [ IF EXISTS ] name RENAME [ COLUMN ] column_name TO new_column_name
ALTER VIEW [ IF EXISTS ] name RENAME TO new_name
ALTER VIEW [ IF EXISTS ] name SET SCHEMA new_schema
ALTER VIEW [ IF EXISTS ] name SET ( view_option_name [= view_option_value] [, ... ] )
ALTER VIEW [ IF EXISTS ] name RESET ( view_option_name [, ... ] )
Parameters (파라미터)
name— 기존 뷰의 이름(선택적으로 스키마로 한정).column_name— 기존 열의 이름.new_column_name— 기존 열의 새 이름.IF EXISTS— 뷰가 존재하지 않아도 오류를 던지지 않아요. 이 경우 알림(notice)이 발생해요.SET/DROP DEFAULT— 이 형태는 열의 기본값을 설정하거나 제거해요. 뷰 열의 기본값은 뷰를 대상으로 하는 모든INSERT또는UPDATE명령에, 뷰에 대한 규칙이나 트리거를 적용하기 전에 대입돼요. 따라서 뷰의 기본값은 하위 관계들의 기본값보다 우선해요.new_owner— 뷰의 새 소유자의 사용자 이름.new_name— 뷰의 새 이름.new_schema— 뷰의 새 스키마.SET ( view_option_name [= view_option_value] [, ... ] )/RESET ( view_option_name [, ... ] )— 뷰 옵션을 설정하거나 초기화해요. 현재 지원되는 옵션은 다음과 같아요.check_option(enum) — 뷰의 체크 옵션을 변경해요. 값은local또는cascaded여야 해요.security_barrier(boolean) — 뷰의 보안 장벽(security-barrier) 특성을 변경해요. 값은true나false같은 Boolean 값이어야 해요.security_invoker(boolean) — 뷰의 security-invoker 특성을 변경해요. 값은true나false같은 Boolean 값이어야 해요.
Notes (주의)
역사적인 이유로 ALTER TABLE도 뷰에 사용할 수 있어요. 하지만 뷰에 허용되는 ALTER TABLE 변형은 위에 나와 있는 것과 동등한 것뿐이에요.
Examples (예시)
뷰 foo의 이름을 bar로 바꾸는 예시예요.
ALTER VIEW foo RENAME TO bar;
업데이트 가능한 뷰에 열 기본값을 붙이는 예시예요.
CREATE TABLE base_table (id int, ts timestamptz);
CREATE VIEW a_view AS SELECT * FROM base_table;
ALTER VIEW a_view ALTER COLUMN ts SET DEFAULT now();
INSERT INTO base_table(id) VALUES(1); -- ts will receive a NULL
INSERT INTO a_view(id) VALUES(2); -- ts will receive the current time
여기서 base_table에 직접 넣은 행의 ts는 NULL이 되지만, 뷰를 통해 넣은 행은 뷰 열의 기본값 덕분에 현재 시각을 받아요.
Compatibility (호환성)
ALTER VIEW는 SQL 표준의 PostgreSQL 확장이에요.
더 알아보기 (Learn more)
- 뷰를 만드는
CREATE VIEW와 삭제하는DROP VIEW를 함께 확인해요.