PostgreSQL의 지원 CREATE TABLE AS
과 SELECT INTO
나는 모두를 할 때 사용합니까?
CREATE TABLE AS
-질의 결과에서 새로운 테이블을 정의
CREATE TABLE AS
테이블을 작성하고SELECT
명령으로 계산 된 데이터로 채 웁니다 . 테이블 컬럼에는 출력 컬럼과 연관된 이름 및 데이터 유형SELECT
이 있습니다 (명시 적으로 새로운 컬럼 이름 목록을 제공하여 컬럼 이름을 대체 할 수있는 경우는 제외).
CREATE TABLE AS
뷰를 만드는 것과 비슷하지만 실제로는 다릅니다. 새 테이블을 만들고 쿼리를 한 번만 평가하여 새 테이블을 처음에 채 웁니다. 새 테이블은 후속 쿼리 소스 테이블 변경 사항을 추적하지 않습니다. 반대로, 뷰SELECT
는 쿼리 할 때마다 정의 문을 다시 평가합니다 .
그리고.
SELECT INTO
-질의 결과에서 새로운 테이블을 정의
SELECT INTO
새 테이블을 만들고 쿼리로 계산 된 데이터로 채 웁니다. 데이터는 normal이기 때문에 클라이언트에 반환되지 않습니다SELECT
. 새 테이블의 열에는의 출력 열과 연관된 이름 및 데이터 유형이SELECT
있습니다.
답변
설명이 없으면 항상 CREATE TABLE AS
예외없이 사용하십시오 . NOTES 아래의 각 하단에 정리되어 있습니다.
노트 SELECT INTO
,
CREATE TABLE AS
기능적으로와 비슷합니다SELECT INTO
.CREATE TABLE AS
이 형식은SELECT INTO
ECTO 또는 PL / pgSQL에서 사용할 수 없으므로 INTO 절을 다르게 해석하므로 권장되는 구문 입니다. 또한에서CREATE TABLE AS
제공하는 기능의 상위 집합을 제공합니다SELECT INTO
.
노트 CREATE TABLE AS
,
이 명령은 기능적으로와 비슷
SELECT INTO
하지만 다른SELECT INTO
구문 사용과 혼동 될 가능성 이 적 으므로 선호 됩니다. 또한에서CREATE TABLE AS
제공하는 기능의 상위 집합을 제공합니다SELECT INTO
.
또한 문서의 호환성 섹션에서 SELECT INTO
더 나아가
SQL 표준은
SELECT INTO
새 테이블을 작성하지 않고 호스트 프로그램의 스칼라 변수로 값을 선택하는 데 사용 합니다. ECPG (34 장 참조)와 PL / pgSQL (41 장 참조)에서 사용 된 사용법입니다. 테이블 생성을 나타내는 PostgreSQL 사용법SELECT INTO
은 역사적입니다.CREATE TABLE AS
이 목적을 위해 새 코드에서 사용 하는 것이 가장 좋습니다 .
우리는
- PostgreSQL은
SELECT INTO
PL / pgSQL 및 ECPG에서만 사용 가능한 컨텍스트에서 다른 작업을 수행 하기 때문에 혼란스러워한다고 생각합니다 . CREATE TABLE
더 많은 기능을 지원합니다 (WITH OIDS
및TABLESPACE
, 및을 참조한다고 가정합니다IF NOT EXISTS
).SELECT INTO
테이블 작성은 “더 이상 사용되지 않습니다”.
참고로, CTE가 있는 CTAS 의 구문 은 약간 이상하게 보일 수 있습니다. , QUEL ‘s에 대한 일종의 보류 SELECT INTO
일 수도 있습니다 . QUEL은 PostgreSQL (INGRES)의 선행 작업이 사용했던 SQL의 선행 작업이었습니다.RETRIEVE INTO
답변
허용 된 답변에서 누락 된 것으로 나타났습니다. 를 사용하면에
CREATE TABLE AS
의해 무시되는 것처럼 보이는 각 열의 nullable 속성이 유지됩니다 SELECT INTO
.
이것만으로도 좋습니다 CREATE TABLE AS
. 두 명령문의 일반적인 사용 사례는 쿼리 지속 시간 동안 해당 테이블을 잠그지 않고 오래 실행되는 쿼리에서 테이블로 데이터를로드하는 것입니다. 위 명령 중 하나를 사용하여 임시 테이블을 작성하고 장기 실행 쿼리 결과를 여기에 넣은 다음 해당 결과를 원래 테이블에 삽입하십시오. 임시 테이블에서 널 입력 가능 속성을 유지하면 두 번째 삽입이 실패 할 가능성이 줄어 듭니다.
PG 11에서 이것을 테스트 했으므로이 질문에 대한 답을 얻은 이후의 새로운 기능 일 것입니다.