2011-10-12 3 views
2

CREATE TABLE AS SELECT PostgreSQL의 문장이 원래 테이블의 NOT NULL 제약 조건을 가진 열이있는 새로운 테이블을 생성하지 않습니다.PostgreSQL의 CREATE TABLE AS SELECT

내 테이블 tab1에 null 제약 조건이있는 col1 및 col2가 있습니다.

create table tab1 (col1 varchar(23) not null, col2 int not null)

지금은 정의와 아래 테이블 TAB2의 데이터를 새로운 테이블 TAB2를 만드는 오전 :

TAB1에서 테이블로 TAB2 선택 COL1, COL2를 만들

그러나 tab2의 col1과 col2는 NOT NULL 제약 조건을 가지고 있지 않습니다. 원래 테이블의 새 테이블 열에서 정확한 NOT NULL 제약 조건을 얻는 방법?

CREATE TABLE AS SELECT 진술을 사용하여이를 달성 할 수있는 방법이 있다면 크게 감사하겠습니다. SQL Server의 Oracle, DB2 및 SELECT .. INTOCREATE TABLE AS SELECT 문은 NOT NULL CONSTRAINT를 데이터와 함께 복사합니다.

+1

가능한 [중복 테이블을 선택하는 것은 postgresql에서 null이 아닌 제약 조건을 삭제하는 것입니다] (http://stackoverflow.com/questions/7738691/creating-table-as-select-is-droping-the-not-null -constraints-in-postgresql) –

+0

같은 일이 1 시간 전에 요청되었습니다. Btw : Oracle에서 'CREATE TABLES AS SELECT'는 제약 조건을 복사하지 않습니다. –

+0

@a_horse_with_no_name 필자는 오라클에서 부모 테이블의 새 테이블의 열에 NOT NULL 제약 조건을 완벽하게 복사하고 있는지 테스트했습니다. 비슷한 스레드에서, 나는 제약 조건을 복사하기 위해 INCLUDE cluase를 사용할 수 있지만 아래처럼 UNION ALL 등으로 쿼리에서 새 테이블을 생성하려면 어떻게해야할까요? CREATE TABLE tab3 AS SELECT * FROM TAB1 UNION ALL SELECT * FROM TAB2' 이것은 나를위한 실제 요구 사항입니다. – vchitta

답변

4

PostgreSQL을에서 기능 당신은 내가 아는 한, 완전히 임의의 SELECT 사용할 수 있고 이것은 단지 하나 개의 테이블을 포함하는 경우 PG는 확인하지 않습니다, is in

CREATE TABLE tablename 
(LIKE parent_table INCLUDING CONSTRAINTS) /* other options too */ 

CREATE TABLE AS를 찾고 있습니다 훨씬 덜 제약을 추론하려고 노력한다.

관련 문제