PostgreSQL에서 테이블 구조를 그대로 복사하는 방법에 대해서 알아보겠습니다.
복사 후에는 시퀀스하고 인덱스, 프라이머리는 꼭 확인 하셔야 합니다.
조건에 맞게 다시 잡아주는 게 속 편합니다. 인덱스 잡기 전에 프라이머리 먼저 잡는 센스.. ^^;
시퀀스 값 데이타 마지막 번호에 맞게 고쳐주고 auto_increment 부분 프라이머리 값에 시퀀스 자동 조건 추가 하셔야 겠죠..
1. 복사할 테이블 구조 생성
test=> CREATE TABLE tb1(no serial primary key, name varchar(16));
NOTICE: CREATE TABLE will create implicit sequence "tb1_no_seq" for serial column "tb1.no"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "tb1_pkey" for table "tb1"
CREATE TABLE
"\d 테이블_명" 명령으로 테이블 구조를 확인합니다.
2. 테스를 위한 데이터 입력 후 확인
test=> INSERT INTO tb1(name) VALUES('최진범');
INSERT 0 1
test=> SELECT * FROM tb1;
no| name
---+--------
1 | 최진범
3. 테이블 복사
test=> CREATE TABLE copy_tb1(LIKE tb1);
CREATE TABLE
MySQL에서는 테이블을 복사할 때 "CREATE TABLE 테이블명 LIKE 복사할_테이블명;" 형태지만
PostgreSQL에서는 "CREATE TABLE 테이블명 (LIKE 복사할_테이블명);" 으로 괄호 차이가 있습니다.
4. 복사한 테이블의 데이터 확인
test=> SELECT * FROM copy_tb1;
no| name
---+------
(0 rows)
위에서 실행한 테이블 복사 쿼리는 테이블의 구조만 복사하기 때문에 tb1에 들어가 있던 값은 복사 되지 않습니다.
5. 기존 테이블 값 복사하고 확인
test=> INSERT INTO copy_tb1 SELECT * FROM tb1;
INSERT 0 1
test=> SELECT * FROM copy_tb1;
no | name
----+--------
1 | 최진범
(1 row)
위의 쿼리를 사용하면 기존에 있던 테이블의 값들을 불러올 수 있습니다.
6. 테이블 전체 복사 후 확인
test=> SELECT * INTO copy_tb2 FROM tb1;
SELECT 1
test=> SELECT * FROM copy_tb2;
no | name
----+--------
1 | 최진범
(1 row)
위의 쿼리 명령어를 실행하면 tb1의 테이블 구조와 데이터를 동시에 복사합니다.
출처 : http://kb.globalsoft.co.kr/web/web_view.php?notice_no=295