Amazon Aurora DSQL은 미리 보기 서비스로 제공됩니다. 자세한 내용은 AWS 서비스 약관의 베타 및 미리
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Aurora DSQL에서 지원되는 SQL 명령 하위 집합
Aurora DSQL은 지원되는 PostgreSQL SQL의 모든 구문을 지원하지 않습니다. 예를 들어 PostgreSQLCREATE TABLE
의 에는 Aurora DSQL이 지원하지 않는 많은 수의 절과 파라미터가 있습니다. 이 섹션에서는 Aurora DSQL이 이러한 명령에 대해 지원하는 PostgreSQL 구문의 구문을 설명합니다.
CREATE TABLE
CREATE TABLE
는 새 테이블을 정의합니다.
CREATE TABLE [ IF NOT EXISTS ] table_name ( [ { column_name data_type [ column_constraint [ ... ] ] | table_constraint | LIKE source_table [ like_option ... ] } [, ... ] ] ) where column_constraint is: [ CONSTRAINT constraint_name ] { NOT NULL | NULL | CHECK ( expression )| DEFAULT default_expr | GENERATED ALWAYS AS ( generation_expr ) STORED | UNIQUE [ NULLS [ NOT ] DISTINCT ] index_parameters | PRIMARY KEY index_parameters | and table_constraint is: [ CONSTRAINT constraint_name ] { CHECK ( expression ) | UNIQUE [ NULLS [ NOT ] DISTINCT ] ( column_name [, ... ] ) index_parameters | PRIMARY KEY ( column_name [, ... ] ) index_parameters | and like_option is: { INCLUDING | EXCLUDING } { COMMENTS | CONSTRAINTS | DEFAULTS | GENERATED | IDENTITY | INDEXES | STATISTICS | ALL } index_parameters in UNIQUE, and PRIMARY KEY constraints are: [ INCLUDE ( column_name [, ... ] ) ]
ALTER TABLE
ALTER TABLE
는 테이블의 정의를 변경합니다.
ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] action [, ... ] ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] RENAME [ COLUMN ] column_name TO new_column_name ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] RENAME CONSTRAINT constraint_name TO new_constraint_name ALTER TABLE [ IF EXISTS ] name RENAME TO new_name ALTER TABLE [ IF EXISTS ] name SET SCHEMA new_schema where action is one of: ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
CREATE VIEW
CREATE VIEW
는 새로운 영구 보기를 정의합니다. Aurora DSQL은 임시 뷰를 지원하지 않으며 영구 뷰만 지원됩니다.
지원되는 구문
CREATE [ OR REPLACE ] [ RECURSIVE ] VIEW name [ ( column_name [, ...] ) ] [ WITH ( view_option_name [= view_option_value] [, ... ] ) ] AS query [ WITH [ CASCADED | LOCAL ] CHECK OPTION ]
설명
CREATE VIEW
는 쿼리 보기를 정의합니다. 보기는 물리적으로 구체화되지 않습니다. 대신 쿼리에서 뷰를 참조할 때마다 쿼리가 실행됩니다.
CREATE or REPLACE VIEW
는 비슷하지만 동일한 이름의 뷰가 이미 있는 경우 대체됩니다. 새 쿼리는 기존 뷰 쿼리에서 생성된 것과 동일한 열(즉, 동일한 순서로 동일한 데이터 형식을 가진 동일한 열 이름)을 생성해야 하지만 목록 끝에 추가 열을 추가할 수 있습니다. 출력 열을 생성하는 계산은 다를 수 있습니다.
CREATE VIEW myschema.myview ...
)와 같은 스키마 이름이 지정되면 지정된 스키마에 뷰가 생성됩니다. 그렇지 않으면 현재 스키마에 생성됩니다.
뷰의 이름은 동일한 스키마에 있는 다른 관계(테이블, 인덱스, 뷰)의 이름과 달라야 합니다.
파라미터
CREATE VIEW
는 다양한 파라미터를 지원하여 자동으로 업데이트 가능한 뷰의 동작을 제어합니다.
RECURSIVE
-
재귀 보기를 생성합니다. 구문:
CREATE RECURSIVE VIEW [ schema . ] view_name (column_names) AS SELECT ...;
는와 동일합니다CREATE VIEW [ schema . ] view_name AS WITH RECURSIVE view_name (column_names) AS (SELECT ...) SELECT column_names FROM view_name;
.재귀적 뷰에 대해 뷰 열 이름 목록을 지정해야 합니다.
name
-
생성할 뷰의 이름으로, 선택적으로 스키마로 한정될 수 있습니다. 재귀 보기에 열 이름 목록을 지정해야 합니다.
column_name
-
뷰의 열에 사용할 선택적 이름 목록입니다. 지정하지 않으면 쿼리에서 열 이름이 추론됩니다.
WITH ( view_option_name [= view_option_value] [, ... ] )
-
이 절은 뷰에 대한 선택적 파라미터를 지정합니다. 다음 파라미터가 지원됩니다.
-
check_option (enum)
-이 파라미터는local
또는 일 수cascaded
있으며 지정과 동일합니다WITH [ CASCADED | LOCAL ] CHECK OPTION
. -
security_barrier (boolean)
- 보기가 행 수준 보안을 제공하기 위한 경우이 옵션을 사용해야 합니다. Aurora DSQL은 현재 행 수준 보안을 지원하지 않지만이 옵션은 뷰의WHERE
조건(및 로 표시된 연산자를 사용하는 모든 조건LEAKPROOF
)을 먼저 평가하도록 강제합니다. -
security_invoker (boolean)
-이 옵션을 사용하면 뷰 소유자가 아닌 뷰 사용자의 권한에 대해 기본 기본 관계를 확인할 수 있습니다. 자세한 내용은 아래 참고 사항을 참조하세요.
를 사용하여 기존 뷰에서 위의 모든 옵션을 변경할 수 있습니다
ALTER VIEW
. -
query
-
뷰의 열과 행을 제공하는
SELECT
또는VALUES
명령입니다.-
WITH [ CASCADED | LOCAL ] CHECK OPTION
-이 옵션은 자동으로 업데이트 가능한 뷰의 동작을 제어합니다. 이 옵션을 지정하면INSERT
새 행이 보기 정의 조건을 충족하는지 보기의UPDATE
명령이 확인됩니다(즉, 새 행이 보기를 통해 표시되는지 확인). 그렇지 않으면 업데이트가 거부됩니다.CHECK OPTION
이 지정되지 않은 경우 뷰의INSERT
및UPDATE
명령은 뷰를 통해 표시되지 않는 행을 생성할 수 있습니다. 다음 검사 옵션이 지원됩니다. -
LOCAL
- 새 행은 보기 자체에 직접 정의된 조건에 대해서만 확인됩니다. 기본 보기에 정의된 모든 조건은 확인되지 않습니다(도 지정하지 않는 한CHECK OPTION
). -
CASCADED
- 보기 및 모든 기본 보기의 조건에 대해 새 행이 확인됩니다.CHECK OPTION
가 지정되고LOCAL
도CASCADED
지정되지 않으면CASCADED
가 수임됩니다.
참고
는
RECURSIVE
뷰와 함께 사용할 수CHECK OPTION
없습니다.CHECK OPTION
는 자동으로 업데이트 가능한 뷰에서만 지원됩니다. -
Notes
DROP VIEW
문을 사용하여 뷰를 삭제합니다. 뷰 열의 이름과 데이터 형식을 신중하게 고려해야 합니다.
예를 들어 열 이름의 기본값CREATE VIEW vista AS SELECT 'Hello World';
은 이므로는 권장되지 않습니다?column?;
.
또한 열 데이터 형식은 기본적으로 로 설정되며text
, 이는 원하는 것과 다를 수 있습니다.
더 나은 방법은 다음과 같이 열 이름과 데이터 형식을 명시적으로 지정하는 것입니다CREATE VIEW vista AS SELECT text 'Hello World' AS hello;
.
기본적으로 뷰에서 참조되는 기본 관계에 대한 액세스는 뷰 소유자의 권한에 따라 결정됩니다. 경우에 따라 기본 테이블에 대한 안전하고 제한된 액세스를 제공하는 데 사용할 수 있습니다. 그러나 모든 뷰가 변조로부터 보호되는 것은 아닙니다.
-
뷰에
security_invoker
속성이 true로 설정된 경우 기본 관계에 대한 액세스는 뷰 소유자가 아닌 쿼리를 실행하는 사용자의 권한에 따라 결정됩니다. 따라서 보안 호출자 뷰의 사용자에게 뷰 및 기본 관계에 대한 관련 권한이 있어야 합니다. -
기본 관계가 보안 호출자 보기인 경우 원본 쿼리에서 직접 액세스한 것처럼 처리됩니다. 따라서 보안 호출자 뷰는
security_invoker
속성이 없는 뷰에서 액세스하더라도 항상 현재 사용자의 권한을 사용하여 기본 기본 관계를 확인합니다. -
뷰에서 호출된 함수는 뷰를 사용하여 쿼리에서 직접 호출된 것과 동일하게 처리됩니다. 따라서 뷰의 사용자에게 뷰에서 사용하는 모든 함수를 호출할 수 있는 권한이 있어야 합니다. 뷰의 함수는 함수가
SECURITY INVOKER
또는 로 정의되었는지 여부에 따라 쿼리를 실행하는 사용자 또는 함수 소유자의 권한으로 실행됩니다SECURITY DEFINER
. 예를 들어 뷰에서CURRENT_USER
직접를 호출하면 뷰 소유자가 아닌 호출하는 사용자가 항상 반환됩니다. 이는 뷰 설정의 영향을 받지security_invoker
않으므로가 false로security_invoker
설정된 뷰는SECURITY DEFINER
함수와 동일하지 않습니다. -
뷰를 생성하거나 교체하는 사용자는 뷰 쿼리에서 참조된 객체를 조회하기 위해 뷰 쿼리에서 참조된 모든 스키마에 대한
USAGE
권한이 있어야 합니다. 그러나이 조회는 뷰가 생성되거나 교체될 때만 발생합니다. 따라서 뷰 사용자에게는 뷰가 포함된 스키마에 대한USAGE
권한만 필요하며, 보안 호출자 뷰의 경우에도 뷰 쿼리에서 참조되는 스키마에 대한 권한은 필요하지 않습니다. -
기존 뷰에서를
CREATE OR REPLACE VIEW
사용하는 경우 뷰의 정의SELECT
규칙과WITH ( ... )
파라미터 및 해당 만CHECK OPTION
변경됩니다. 소유권, 권한 및 비 SELECT 규칙을 포함한 다른 보기 속성은 변경되지 않습니다. 뷰를 대체하려면 뷰를 소유해야 합니다(소유 역할의 멤버가 되는 것을 포함).
업데이트 가능한 뷰
단순 뷰는 자동으로 업데이트할 수 있습니다. 시스템에서는 일반 테이블과 동일한 방식으로 뷰에서 INSERT
UPDATE
, 및 DELETE
문을 사용할 수 있습니다. 뷰는 다음 조건을 모두 충족하는 경우 자동으로 업데이트됩니다.
-
뷰에는
FROM
목록에 정확히 하나의 항목이 있어야 하며,이 항목은 테이블 또는 다른 업데이트 가능한 뷰여야 합니다. -
보기 정의에는 최상위 수준의
WITH
,DISTINCT
,GROUP BY
,HAVING
LIMIT
, 또는OFFSET
절이 포함되어서는 안 됩니다. -
보기 정의에는 최상위 수준에서 설정된 작업(
UNION
,INTERSECT
또는EXCEPT
)이 포함되어서는 안 됩니다. -
뷰의 선택 목록에는 집계, 창 함수 또는 집합 반환 함수가 포함되어서는 안 됩니다.
자동 업데이트 가능 보기에는 업데이트 가능 열과 업데이트 불가능 열이 혼합되어 있을 수 있습니다. 기본 관계의 업데이트 가능 열에 대한 간단한 참조인 경우 열을 업데이트할 수 있습니다. 그렇지 않으면 열은 읽기 전용이며 INSERT
또는 UPDATE
문이 값을 할당하려고 하면 오류가 발생합니다.
자동으로 업데이트 가능한 뷰의 경우 시스템은 뷰의 모든 INSERT
UPDATE
, 또는 DELETE
문을 기본 관계의 해당 문으로 변환합니다. ON CONFLICT UPDATE
절이 있는 INSERT
문은 완전히 지원됩니다.
자동 업데이트 가능 뷰에 WHERE
조건이 포함된 경우 조건은 뷰의 UPDATE
및 DELETE
문에서 수정할 수 있는 기본 관계의 행을 제한합니다. 그러나는 더 이상 WHERE
조건을 충족하지 않도록 행을 변경하여 보기를 통해 볼 UPDATE
수 없도록 할 수 있습니다. 마찬가지로 INSERT
명령은 WHERE
잠재적으로 조건을 충족하지 않는 기본 관계 행을 삽입하여 보기를 통해 볼 수 없게 만들 수 있습니다.는 보기를 통해 볼 수 없는 기존 행에 유사한 영향을 미칠 ON CONFLICT UPDATE
수 있습니다.
를 사용하여 INSERT
및 UPDATE
명령이 뷰CHECK OPTION
를 통해 표시되지 않는 행을 생성하지 못하도록 할 수 있습니다.
자동 업데이트 가능 뷰에 security_barrier 속성이 표시된 경우 뷰의 모든 WHERE
조건(및 로 표시된 연산자를 사용하는 모든 조건LEAKPROOF
)은 뷰 사용자가 추가한 조건이 발생하기 전에 항상 평가됩니다. 이로 인해 최종적으로 반환되지 않는 행(사용자 WHERE
조건을 통과하지 못하기 때문)은 여전히 잠길 수 있습니다. EXPLAIN
를 사용하여 관계 수준에서 적용되는 조건(따라서 행을 잠그지 않음)과 그렇지 않은 조건을 확인할 수 있습니다.
이러한 모든 조건을 충족하지 않는 보다 복잡한 보기는 기본적으로 읽기 전용입니다. 시스템은 보기에서 삽입, 업데이트 또는 삭제를 허용하지 않습니다.
참고
보기에서 삽입, 업데이트 또는 삭제를 수행하는 사용자에게는 보기에 대한 해당 삽입, 업데이트 또는 삭제 권한이 있어야 합니다. 기본적으로 뷰의 소유자는 기본 기본 관계에 대한 관련 권한을 가지고 있어야 하지만 업데이트를 수행하는 사용자에게는 기본 관계에 대한 권한이 필요하지 않습니다. 그러나 뷰에 security_invoker가 true로 설정된 경우 뷰 소유자가 아닌 업데이트를 수행하는 사용자에게 기본 관계에 대한 관련 권한이 있어야 합니다.
예시
모든 코미디 영화로 구성된 뷰를 생성합니다.
CREATE VIEW comedies AS SELECT * FROM films WHERE kind = 'Comedy';
그러면 뷰 생성 시 film
테이블에 있는 열이 포함된 뷰가 생성됩니다. *
가 뷰를 생성하는 데 사용되었지만 나중에 테이블에 추가된 열은 뷰의 일부가 아닙니다.
를 사용하여 뷰를 생성합니다LOCAL CHECK OPTION
.
CREATE VIEW pg_comedies AS SELECT * FROM comedies WHERE classification = 'PG' WITH CASCADED CHECK OPTION;
그러면 새 행classification
의 kind
및를 모두 확인하는 보기가 생성됩니다.
업데이트 가능한 열과 업데이트 불가능한 열이 혼합된 뷰를 생성합니다.
CREATE VIEW comedies AS SELECT f.*, country_code_to_name(f.country_code) AS country, (SELECT avg(r.rating) FROM user_ratings r WHERE r.film_id = f.id) AS avg_rating FROM films f WHERE f.kind = 'Comedy';
이 보기는 INSERT
, 및 UPDATE
를 지원합니다DELETE
. 영화 테이블의 모든 열은 업데이트 가능하지만 계산된 열country
과 avg_rating
는 읽기 전용입니다.
CREATE RECURSIVE VIEW public.nums_1_100 (n) AS VALUES (1) UNION ALL SELECT n+1 FROM nums_1_100 WHERE n < 100;
참고
재귀 보기의 이름은이에서 스키마 검증되었지만 CREATE
내부 자체 참조는 스키마 검증되지 않습니다. 이는 암시적으로 생성된 공통 테이블 표현식(CTE)의 이름을 스키마로 한정할 수 없기 때문입니다.
호환성
CREATE OR REPLACE VIEW
는 PostgreSQL 언어 확장입니다. WITH ( ... )
절은 확장이며 보안 장벽 뷰 및 보안 호출자 뷰도 마찬가지입니다. Aurora DSQL은 이러한 언어 확장을 지원합니다.
ALTER VIEW
ALTER VIEW
문을 사용하면 기존 뷰의 다양한 속성을 변경할 수 있으며 Aurora DSQL은이 명령에 대한 모든 PostgreSQL 구문을 지원합니다.
지원되는 구문
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 [, ... ] )
설명
ALTER VIEW
는 보기의 다양한 보조 속성을 변경합니다. (뷰의 정의 쿼리를 수정하려면를 사용합니다CREATE OR REPLACE VIEW
.) 를 사용하려면 뷰를 소유해야 합니다ALTER VIEW
. 뷰의 스키마를 변경하려면 새 스키마에 대한 CREATE
권한도 있어야 합니다. 소유자를 변경하려면 새 소유 역할을 SET ROLE
변경할 수 있어야 하며 해당 역할에 뷰의 스키마에 대한 CREATE
권한이 있어야 합니다. 이러한 제한은 소유자를 변경해도 뷰를 삭제하고 다시 생성하여 수행할 수 없는 작업은 수행하지 않도록 강제합니다.)
파라미터
ALTER VIEW
파라미터
name
-
기존 뷰의 이름(선택 사항으로 스키마로 한정됨)입니다.
column_name
-
기존 열의 새 이름입니다.
IF EXISTS
-
뷰가 없는 경우 오류가 발생하지 않습니다. 이 경우 알림이 발행됩니다.
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)
- 보기의 보안 장벽 속성을 변경합니다. 값은true
또는와 같은 부울 값이어야 합니다false
. -
security_invoker (boolean)
- 보기의 보안 장벽 속성을 변경합니다. 값은true
또는와 같은 부울 값이어야 합니다false
.
-
Notes
과거 PG 이유로는 뷰에서도 사용할 ALTER TABLE
수 있지만 뷰에서 ALTER TABLE
허용되는의 유일한 변형은 이전에 표시된 변형과 동일합니다.
예시
뷰의 이름을 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
호환성
ALTER VIEW
는 Aurora DSQL이 지원하는 SQL 표준의 PostgreSQL 확장입니다.
DROP VIEW
DROP VIEW
문은 기존 보기를 제거합니다. Aurora DSQL은이 명령에 대한 전체 PostgreSQL 구문을 지원합니다.
지원되는 구문
DROP VIEW [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
설명
DROP VIEW
는 기존 보기를 삭제합니다. 이 명령을 실행하려면 뷰의 소유자여야 합니다.
파라미터
IF EXISTS
-
뷰가 없는 경우 오류가 발생하지 않습니다. 이 경우 알림이 발행됩니다.
name
-
제거할 뷰의 이름(선택 사항으로 스키마로 한정됨)입니다.
CASCADE
-
뷰에 의존하는 객체(예: 다른 뷰)를 자동으로 삭제한 다음 해당 객체에 의존하는 모든 객체를 삭제합니다.
RESTRICT
-
객체가 종속된 경우 보기를 삭제하는 것을 거부합니다. 이 값이 기본값입니다.
예시
DROP VIEW kinds;
호환성
이 명령은 SQL 표준을 준수합니다. 단, Aurora DSQL이 지원하는 PostgreSQL 확장인 IF EXISTS
옵션을 제외하고 표준에서 명령당 하나의 뷰만 삭제할 수 있습니다.