CREATE PUBLICATION

CREATE PUBLICATION — 새 발행 정의

요약

CREATE PUBLICATION 이름
    [ FOR TABLE [ ONLY ] 테이블이름 [ * ] [, ...]
      | FOR ALL TABLES ]
    [ WITH ( 발행_매개변수 [= ] [, ... ] ) ]

설명

CREATE PUBLICATION 명령은 현재 데이터베이스에서 새 발행을 만든다. 이 발행 이름은 데이터베이스 내에서 유일해야 한다.

발행이란 논리 복제에서 사용할 그 대상 테이블 목록이다. 논리 복제 발행에 대한 설명은 30.1절에서 하고 있다.

매개 변수

이름

새로 만들 발행 이름.

FOR TABLE

발행에 포함할 테이블 목록. 테이블 이름 앞에 ONLY 키워드를 추가하면, 그 테이블의 하위 테이블을 포함하지 않고 그 테이블만 대상으로 하고, ONLY 키워드가 없으면 그 테이블 포함, 하위 테이블들도 모두 발행 대상이 된다. 선택적으로 가독성을 높이기 위해 * 문자를 추가해서, 하위 테이블 모두를 포함한다고 할 수도 있다.

이 목록에 추가 될 수 있는 테이블은 일반 테이블과 파티션 테이블 뿐이다. 임시 테이블, 언로그드 테이블, 외부 테이블, 구체화한 뷰, 일반 뷰는 발행 목록에 추가할 수 없다.

상위 파티션 테이블을 추가할 경우, 하위 파티션 테이블은 상위 파티션 테이블에 암묵적으로 포함되는 것으로 간주하기 때문에, 상위 테이블 대상으로 한 작업은 실제로는 각 개별 하위 테이블 대상으로 하기 때문에, 발행과 구독은 그 실제 하위 테이블 대상으로 이뤄진다.

FOR ALL TABLES

해당 데이터베이스 내 모든 테이블(앞으로 만들어지는 테이블도 포함해서)을 발행 대상 테이블로 지정한다.

WITH ( 발행_매개변수 [= ] [, ... ] )

이 구문으로 발행 옵션을 설정한다. 사용할 수 있는 매개 변수는 다음과 같다:

publish (string)

어떤 DML 작업에 대해서 발행할 것인지를 지정한다. 사용할 수 있는 값은 insert, update, delete, truncate 네 가지며, 쉼표로 구분해서 여러 개 사용할 수 있다. 기본값은 모든 작업을 대상으로 하는 'insert, update, delete, truncate'.

publish_via_partition_root (boolean)

This parameter determines whether changes in a partitioned table (or on its partitions) contained in the publication will be published using the identity and schema of the partitioned table rather than that of the individual partitions that are actually changed; the latter is the default. Enabling this allows the changes to be replicated into a non-partitioned table or a partitioned table consisting of a different set of partitions.

If this is enabled, TRUNCATE operations performed directly on partitions are not replicated.

참고

FOR TABLE, FOR ALL TABLES 두 옵션 모두 사용하지 않는다면, 발행 목록을 비워둔 채로 발행을 만든다. 이 방법은 나중에 필요한 테이블만 따로 추가하려고 할 때 유용하게 사용된다.

이 발행을 만든다고 바로 복제를 시작하지는 않는다. 향후 구독 서버에서 구독을 할 수 있는 발행 정보를 만드는 일만 한다.

발행을 만드려면, 해당 데이터베이스에 대해서 CREATE 권한이 있어야 한다. (슈퍼유저는 예외)

발행에 테이블을 추가하려면, 해당 테이블의 소유주와 이 명령을 실행하는 사용자가 같거나, 상위 권한이 있는 사용자여야 한다. FOR ALL TABLES 구문을 사용하는 경우는 슈퍼유저여야 한다.

UPDATE, DELETE 작업을 발행하는 테이블은 그 테이블 속성으로 REPLICA IDENTITY 속성이 활성화 되어 있어야 한다. 그렇지 않으면, 발행 목록에 포함될 수 없다.

발행 서버에서 있었던 INSERT ... ON CONFLICT 작업은 구독 서버로 그 작업의 결과 작업이 전달된다. 즉, INSERT 작업이 될 수도 있고, UPDATE 작업이 될 수도 있고, 아니면, 아에 아무 작업도 전달되지 않을 수 있다.

COPY ... FROM 작업은 INSERT 작업으로 바뀌어 전달된다.

DDL 구문은 발행되지 않는다.

예제

두 테이블의 모든 DML 작업에 대해서 발행 만들기:

CREATE PUBLICATION mypublication FOR TABLE users, departments;

모든 테이블의 모든 DML 작업에 대해서 발행 만들기:

CREATE PUBLICATION alltables FOR ALL TABLES;

한 테이블의 INSERT 작업에 대해서만 발행 만들기:

CREATE PUBLICATION insert_only FOR TABLE mydata
    WITH (publish = 'insert');

호환성

CREATE PUBLICATION 구문은 PostgreSQL 확장 기능이다.

관련 항목

ALTER PUBLICATION, DROP PUBLICATION