`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) 특성을 변경해요. 값은 truefalse 같은 Boolean 값이어야 해요.
    • security_invoker (boolean) — 뷰의 security-invoker 특성을 변경해요. 값은 truefalse 같은 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를 함께 확인해요.