DB/PostgreSQL

[PostgreSQL - DBA] 테이블 완전 복사하기

Kang_hobin 2023. 10. 6. 10:25

PostgreSQL 에서 특정 테이블의 인덱스, PK,등등 모든 사항을 전체 복사하는 방법이 있다.

아주 상세한 설명은 PostgreSQL Create Table 부분에서 찾을 수 있으나.. 뭐 너무 길어서 보기도 힘들다.

일단은 참고하려면 더보기..

더보기

https://www.postgresql.org/docs/current/sql-createtable.html 

위 내용에서 내가 원하는 부분은 여기다!

 

LIKE source_table [ like_option ... ] 

 LIKE절은 새 테이블이 모든 열 이름, 해당 데이터 유형 및 null이 아닌 제약 조건을 자동으로 복사하는 테이블을 지정합니다.

와 달리 INHERITS새 테이블과 원본 테이블은 생성이 완료된 후 완전히 분리됩니다. 원본 테이블에 대한 변경 사항은 새 테이블에 적용되지 않으며 원본 테이블 스캔에 새 테이블의 데이터를 포함할 수 없습니다.

또한 와 달리 INHERITS에서 복사한 열 및 제약 조건은 LIKE비슷한 이름의 열 및 제약 조건과 병합되지 않습니다. 동일한 이름이 명시적으로 지정되거나 다른 LIKE절에 지정되면 오류가 발생합니다.

선택적 like_option절은 복사할 원본 테이블의 추가 속성을 지정합니다. 지정하면 INCLUDING속성이 복사되고, 지정하면 EXCLUDING속성이 생략됩니다. EXCLUDING기본값입니다. 동일한 종류의 객체에 대해 여러 사양을 지정한 경우 마지막 사양이 사용됩니다. 사용 가능한 옵션은 다음과 같습니다.

INCLUDING COMMENTS 

복사된 컬럼, 제약조건, 인덱스에 대한 설명이 복사됩니다. 기본 동작은 주석을 제외하는 것입니다. 그러면 새 테이블의 복사된 열과 제약 조건에 주석이 없습니다.

INCLUDING COMPRESSION 

열의 압축 방법이 복사됩니다. 기본 동작은 압축 방법을 제외하여 열에 기본 압축 방법이 적용되는 것입니다.

INCLUDING CONSTRAINTS 

CHECK제약 조건이 복사됩니다. 열 제약 조건과 테이블 제약 조건 간에는 구별이 없습니다. Null이 아닌 제약 조건은 항상 새 테이블에 복사됩니다.

INCLUDING DEFAULTS 

복사된 열 정의에 대한 기본 표현식이 복사됩니다. 그렇지 않으면 기본 표현식이 복사되지 않아 새 테이블의 복사된 열에 기본값이 null이 됩니다. 와 같은 데이터베이스 수정 기능을 호출하는 기본값을 복사하면 nextval원본 테이블과 새 테이블 사이에 기능적 연결이 생성될 수 있습니다.

INCLUDING GENERATED 

복사된 열 정의의 모든 생성 표현식이 복사됩니다. 기본적으로 새 열은 일반 기본 열이 됩니다.

INCLUDING IDENTITY 

복사된 열 정의의 모든 ID 사양이 복사됩니다. 이전 테이블과 연결된 시퀀스와 별도로 새 테이블의 각 ID 열에 대해 새 시퀀스가 ​​생성됩니다.

INCLUDING INDEXES 

원래 테이블의 인덱스, PRIMARY KEY, UNIQUE및 EXCLUDE제약 조건이 새 테이블에 생성됩니다. 새 인덱스 및 제약 조건의 이름은 원본 이름 지정 방법에 관계없이 기본 규칙에 따라 선택됩니다. (이 동작은 새 인덱스에 대한 중복 이름 오류를 방지합니다.)

INCLUDING STATISTICS 

확장 통계는 새 테이블에 복사됩니다.

INCLUDING STORAGE 

STORAGE복사된 열 정의에 대한 설정이 복사됩니다. 기본 동작은 STORAGE설정을 제외하여 새 테이블의 복사된 열에 유형별 기본 설정이 적용되는 것입니다. STORAGE설정 에 대한 자세한 내용은 섹션 73.2를 참조하세요 .

INCLUDING ALL 

INCLUDING ALL사용 가능한 모든 개별 옵션을 선택하는 축약된 형식입니다. ( 일부 특정 옵션을 제외하고 모두 선택한 EXCLUDING후에 개별 조항을 작성하는 것이 유용할 수 있습니다 .)INCLUDING ALL

또한 이 LIKE절을 사용하여 뷰, 외부 테이블 또는 복합 유형의 열 정의를 복사할 수도 있습니다. 적용할 수 없는 옵션(예: INCLUDING INDEXES보기)은 무시됩니다.


기본 옵션은 EXCLUDING이고, INCLUDING + OPTION 지정을 통해서 원하는 사항까지 추가로 복사하는 개념이다.

아마 아래처럼 전체 다 복사해버리고 쓸 일도 있을 듯 하다.

-- 인덱스 등 기타 사항 전부 복사
create table copy_target_table (like copy_source_table including all)
;

 

위 처럼 including all을 하면 모든 내용 (COMMENTS, COMPRESSION, CONSTRAINTS, DEFAULTS, GENERATED, IDENTITY, INDEXES, STATISTICS, STORAGE) 이 다 복사된다.