생성된 열은 항상 다른 열에서 계산되는 특수 열입니다. 따라서 테이블에 대한 뷰와 열에 대한 것입니다. 생성된 열에는 저장 열과 가상 열의 두 가지 종류가 있습니다. 저장된 생성 열은 작성(삽입 또는 업데이트)될 때 계산되고 일반 열인 것처럼 저장소를 차지합니다. 가상 생성 열은 스토리지를 차지하지 않으며 읽을 때 계산됩니다. 따라서 가상 생성 열은 뷰와 유사하고 저장된 생성 열은 구체화된 뷰와 유사합니다(항상 자동으로 업데이트된다는 점만 제외). PostgreSQL은 현재 저장된 생성 열만 구현합니다.
생성된 열을 생성하려면 의 GENERATED ALWAYS AS절을 사용하십시오 CREATE TABLE. 예를 들면 다음과 같습니다.
CREATE TABLE 사람(
...,
height_cm 숫자,
height_in 숫자 GENERATED ALWAYS AS (height_cm / 2.54) STORED
);
STORED생성된 열의 저장된 종류를 선택하려면 키워드 를 지정해야 합니다. 자세한 내용은 CREATE TABLE 을 참조하십시오.
생성된 열은 직접 쓸 수 없습니다. INSERT또는 명령 에서 UPDATE생성된 열에 대해 값을 지정할 수 없지만 키워드 DEFAULT는 지정할 수 있습니다.
기본값이 있는 열과 생성된 열 간의 차이점을 고려하십시오. 열 기본값은 다른 값이 제공되지 않은 경우 행이 처음 삽입될 때 한 번 평가됩니다. 생성된 열은 행이 변경될 때마다 업데이트되며 재정의할 수 없습니다. 열 기본값은 테이블의 다른 열을 참조하지 않을 수 있습니다. 생성 표현식은 일반적으로 그렇게 할 것입니다. 열 기본값은 휘발성 함수(예: random()현재 시간을 참조하는 함수)를 사용할 수 있습니다. 생성된 열에는 허용되지 않습니다.
생성된 열 및 생성된 열을 포함하는 테이블의 정의에는 몇 가지 제한 사항이 적용됩니다.
- 생성 표현식은 변경할 수 없는 함수만 사용할 수 있으며 하위 쿼리를 사용하거나 현재 행 이외의 어떤 것도 참조할 수 없습니다.
- 생성 표현식은 생성된 다른 열을 참조할 수 없습니다.
- 생성 표현식은 를 제외하고 시스템 열을 참조할 수 없습니다 tableoid.
- 생성된 열은 열 기본값 또는 ID 정의를 가질 수 없습니다.
- 생성된 열은 파티션 키의 일부가 될 수 없습니다.
- 외부 테이블에는 생성된 열이 있을 수 있습니다. 자세한 내용은 CREATE FOREIGN TABLE 을 참조하십시오.
- 상속의 경우:
-
- 상위 컬럼이 생성된 컬럼인 경우 하위 컬럼도 동일한 표현식을 사용하는 생성된 컬럼이어야 합니다. 자식 열의 정의 GENERATED에서 부모에서 복사되므로 절을 생략합니다.
- 다중 상속의 경우 하나의 상위 열이 생성된 열이면 모든 상위 열은 동일한 표현식을 사용하여 생성된 열이어야 합니다.
- 상위 컬럼이 생성 컬럼이 아닌 경우 하위 컬럼을 생성 컬럼으로 정의하거나 생성하지 않을 수 있습니다.
생성된 열을 사용할 때 추가 고려 사항이 적용됩니다.
- 생성된 열은 기본 기본 열과 별도로 액세스 권한을 유지합니다. 따라서 특정 역할이 생성된 열에서 읽을 수 있지만 기본 기본 열에서는 읽을 수 없도록 정렬할 수 있습니다.
- BEFORE생성된 열은 개념적으로 트리거가 실행 된 후 업데이트됩니다 . 따라서 트리거의 기본 열에 대한 변경 사항은 BEFORE생성된 열에 반영됩니다. BEFORE그러나 반대로 트리거 에서 생성된 열에 액세스하는 것은 허용되지 않습니다 .