2016-06-24 2 views
0

postgres (9.5)를 처음 사용했지만 문서에서 아무 것도 찾을 수 없습니다.복사 테이블 (테이블 만들기) - 기본 키 자동 증가 유지 안함

은 기본적으로 다음과 같이 테이블을 만들 :

CREATE TABLE test (
     id serial primary key, 
     field1 CHARACTER VARYING(50) 
     ); 

을 다음 복사 :

create table test_copy (like test); 

테이블 시험이 열이 있습니다

COLUMN_NAME id field1 
DATA_TYPE 4 12 
TYPE_NAME serial varchar 
COLUMN_SIZE 10 50 
IS_NULLABLE NO YES 
IS_AUTOINCREMENT  YES NO 

을하지만 test_copy이 있습니다

COLUMN_NAME id field1 
DATA_TYPE 4 12 
TYPE_NAME int4 varchar 
COLUMN_SIZE 10 50 
IS_NULLABLE NO YES 
IS_AUTOINCREMENT  NO NO 

왜 시리얼 및 자동 증가가 손실됩니까? 어떻게 이들을 보존하는 테이블의 복사본을 만들 수 있습니까?

답변

1

당신은 시도 할 수 있습니다 :

create table test_inh() inherits (test); 다음

alter table test_inh no inherit test;

serial 정말 데이터 타입이 아니기 때문에 이것은 당신

+0

보인다. 무엇에 대한 변경 진술은 무엇입니까? – Greg

+1

테이블을 상속 할 때 구조를 복사 할뿐만 아니라 참조를 유지합니다. https://www.postgresql.org/docs/current/static/ddl-inherit.html 구조 만 복제하려면 상속 테이블을 만들고 gthen은 상속하지 않습니다. –

1

에 대한 동일한 순서 기본값을 유지해야한다. 정수 + 시퀀스 + 기본값으로 "확장"됩니다.

See the manual for details

create table test_copy (like test INCLUDING DEFAULTS)를 사용하는 데 필요한 기본 정의를 얻으려면.

그러나 그 다음 동일한 시퀀스를 원래 테이블과 같이 사용합니다.

당신이 psql 테이블 정의를 표시 할 때 당신은 차이를 볼 수 있습니다 : 그 작품처럼

psql (9.5.3) 
Type "help" for help. 

postgres=> CREATE TABLE test (
postgres(>   id serial primary key, 
postgres(>   field1 CHARACTER VARYING(50) 
postgres(>  ); 
CREATE TABLE 
postgres=> create table test_copy_no_defaults (like test); 
CREATE TABLE 
postgres=> create table test_copy (like test including defaults); 
CREATE TABLE 
postgres=> \d test 
           Table "public.test" 
Column |   Type   |      Modifiers 
--------+-----------------------+--------------------------------------------------- 
id  | integer    | not null default nextval('test_id_seq'::regclass) 
field1 | character varying(50) | 
Indexes: 
    "test_pkey" PRIMARY KEY, btree (id) 

postgres=> \d test_copy 
          Table "public.test_copy" 
Column |   Type   |      Modifiers 
--------+-----------------------+--------------------------------------------------- 
id  | integer    | not null default nextval('test_id_seq'::regclass) 
field1 | character varying(50) | 

postgres=> \d test_copy_no_defaults 
    Table "public.test_copy_no_defaults" 
Column |   Type   | Modifiers 
--------+-----------------------+----------- 
id  | integer    | not null 
field1 | character varying(50) | 
+0

고마워요! 명확히하기 위해 "동일한 순서"에 대해 무엇을 의미합니까? 그게 내가 원하지 않는 것인가? – Greg