CREATE SUBSCRIPTION — 새 구독 정의
CREATE SUBSCRIPTION구독이름
CONNECTION '접속정보
' PUBLICATION발행이름
[, ...] [ WITH (구독_매개변수
[=값
] [, ... ] ) ]
CREATE SUBSCRIPTION
명령은
현재 데이터베이스용 새 구독을 만든다.
구독 이름은 해당 데이터베이스 내 유일해야 한다.
구독 작업은 발행 서버로 복제용 접속을 사용한다. 이 작업은 자신의 데이터베이스 내 구독 관련 카탈로그 정보를 추가하는 일을 하며, 더불어 발행 서버 쪽에 복제 슬롯을 만든다.
이 명령이 완료되면, 새 구독용 복제 자료를 처리할 하나의 논리 복제 작업자가 내부적으로 실행된다.
구독이름
만들 새 구독 이름.
CONNECTION '접속정보
'
발행 서버 접속 문자열. 34.1.1절 참조.
PUBLICATION 발행이름
구독하려면, 발행서버에서 제공하고 있는 발행 이름.
WITH ( 구독_매개변수
[= 값
] [, ... ] )
해당 구독의 옵션으로 사용되는 매개 변수값 지정. 지원 하는 매개 변수는 다음과 같다:
copy_data
(boolean
)
복제를 시작할 때 발행 목록에 있는 자료들도 한번에 모두
복사하고 복제를 시작할지를 지정한다.
기본값은 true
.
create_slot
(boolean
)
복제 작업용 논리 복제 슬롯을 발행 서버에 만들지를 지정한다.
기본값은 true
.
enabled
(boolean
)
이 만들기 작업 완료 즉시 복제를 시작할지를 지정한다.
기본값은 true
.
slot_name
(string
)사용할 복제 슬롯 이름. 기본값은 구독 이름과 같다.
slot_name
값으로
NONE
을 지정하면,
복제 슬롯을 사용하지 않는다. 이는
복제 슬롯을 나중에 만들겠다는 것을 의미하기 때문에,
이렇게 지정하면, enabled
,
create_slot
값 모두 false
여야
한다.
synchronous_commit
(enum
)
복제 작업에서 참조하는
synchronous_commit 설정을 바꾼다.
기본값은 off
.
논리 복제에서는 off
로 설정해도 안전하다:
논리 복제에서는 구독 쪽에서 한 트랜잭션을 놓쳤도,
발행 쪽에서 다시 보낸다.
동기식 논리 복제인 경우라면, 이 값을 다르게 설정할 필요가 있다.
동기식 논리 복제를 사용한다면,
발행과 구독간 자료 동기화가 정확하게 맞아야하기 때문에,
구독 서버에서 작업이 완료될 때까지 발행 서버 쪽에서
기다려야 한다.
동기식 복제인 경우, 구독 작업에서
synchronous_commit
= off
설정을 해도, 발행 서버 쪽 COMMIT
작업 대기 시간이 증가할 것이다.
동기식 논리 복제인 경우는
synchronous_commit
값을
local
또는 그 이상으로 지정하는 것이 안전하다.
connect
(boolean
)
CREATE SUBSCRIPTION
명령이 실행되면,
기본적으로 해당 발행 서버로 복제 접속을 시도한다.
이 옵션을 false
로 지정하면,
enabled
, create_slot
,
copy_data
이 옵션들을 모두
false
로 지정하는 것가 같다.
이 때문에, enabled
,
create_slot
, copy_data
옵션 가운데, 하나라도 true
로 설정했다면,
connect
옵션은 false
로
설정할 수 없다.
false
설정은 테이블 구독을 안함을 의미한다.
나중에 이 값을 바꾼다 하더라도 구독 작업은 진행하지 않는다.
이런 경우는
ALTER SUBSCRIPTION ... REFRESH PUBLICATION
명령으로
구독을 갱신해야 한다.
발행 서버와 구독 서버 사이 접근 제어 관련 설정과 설명은 31.7절에서 다룬다.
복제 슬롯을 만드는 구독 만들기(기본값) 용도의
CREATE SUBSCRIPTION
명령은
트랜잭션 블럭 안에서는 사용하지 못한다.
같은 데이터베이스 클러스터 내에서 구독을 만들 때는,
(다른 데이터베이스간 논리 복제를 하든, 같은 데이터베이스 내에서 하든)
이 작업으로 복제 슬롯이 함께 만들어지는 명령으로 실행하면,
정상 실행되지 않고, 무한 대기 상태로 빠진다.
이 문제를 피하려면,
먼저 복제 슬롯을 수동으로 만들고
(pg_create_logical_replication_slot
함수에서
플러그인을 pgoutput
로 지정함),
구독은 create_slot = false
옵션을 지정해서 만든다.
이 제한점은
다음 버전에서 풀어야할 부분이다.
다음은 해당 발행 서버로 접속해서,
mypublication
, insert_only
발행을 즉시 구독해서 테이블 복제 작업을 진행하는 경우다:
CREATE SUBSCRIPTION mysub CONNECTION 'host=192.168.1.50 port=5432 user=foo dbname=foodb' PUBLICATION mypublication, insert_only;
insert_only
발행에 대한 구독 정보만 등록하는 경우다.
실제 복제 작업은 이 구독을 활성화 할 때 진행된다.
CREATE SUBSCRIPTION mysub CONNECTION 'host=192.168.1.50 port=5432 user=foo dbname=foodb' PUBLICATION insert_only WITH (enabled = false);
CREATE SUBSCRIPTION
구문은 PostgreSQL
확장 기능이다.