a토토 커뮤니티는 논리적 복제의 다운 스트림 측면입니다. 토토 커뮤니티이 정의 된 노드를라고합니다.가입자. 토토 커뮤니티은 토토 커뮤니티하고자하는 다른 데이터베이스 및 출판물 세트 (하나 이상)에 대한 연결을 정의합니다.
가입자 데이터베이스는 다른 PostgreSQL 인스턴스와 같은 방식으로 작동하며 자체 출판물을 정의하여 다른 데이터베이스의 게시자로 사용할 수 있습니다.
가입자 노드에는 원하는 경우 여러 개의 토토 커뮤니티이있을 수 있습니다. 단일 게시자-토토 커뮤니티자 쌍 사이의 여러 토토 커뮤니티을 정의 할 수 있습니다. 토토 커뮤니티 된 출판물 객체가 겹치지 않도록주의해야합니다.
각 토토 커뮤니티은 하나의 복제 슬롯을 통해 변경 사항을받습니다 (참조섹션 26.2.6). 기존 테이블 데이터의 초기 데이터 동기화에는 추가 복제 슬롯이 필요할 수 있으며 데이터 동기화 끝에 삭제됩니다.
논리적 복제 토토 커뮤니티은 동기 복제의 대기가 될 수 있습니다 (참조섹션 26.2.8). 대기 이름은 기본적으로 토토 커뮤니티 이름입니다. 대체 이름은로 지정할 수 있습니다.application_name
토토 커뮤니티의 연결 정보에서.
토토 커뮤니티은 |pg_dump
현재 사용자가 슈퍼 사용자 인 경우. 그렇지 않으면 경고가 작성되고 토토 커뮤니티이 건너 뜁니다. 비 슈퍼 사용자가에서 모든 토토 커뮤니티 정보를 읽을 수 없기 때문입니다.pg_subscription
카탈로그
토토 커뮤니티은를 사용하여 추가됩니다.토토 커뮤니티 생성
토토 커뮤니티 변경
명령 및 사용삭제 토토 커뮤니티
.
토토 커뮤니티이 삭제되어 재생성되면 동기화 정보가 손실됩니다. 이것은 데이터가 나중에 재 동기화되어야 함을 의미합니다.
스키마 정의는 복제되지 않으며 게시 된 테이블은 가입자에게 있어야합니다. 일반 테이블 만 복제의 대상 일 수 있습니다. 예를 들어,보기로 복제 할 수 없습니다.
테이블은 완전히 자격을 갖춘 테이블 이름을 사용하여 게시자와 가입자간에 일치합니다. 가입자의 다른 이름으로 표시된 테이블에 대한 복제는 지원되지 않습니다.
테이블의 열은 이름과 일치합니다. 가입자 테이블의 열 순서는 게시자의 열 순서와 일치 할 필요가 없습니다. 데이터의 데이터 유형은 데이터의 텍스트 표현을 대상 유형으로 변환 할 수있는 한 일치 할 필요가 없습니다. 예를 들어, 유형 열에서 복제 할 수 있습니다정수
유형 열bigint
. 대상 테이블에는 게시 된 테이블에서 제공되지 않은 추가 열이있을 수 있습니다. 이러한 열은 대상 테이블의 정의에 지정된 기본값으로 채워집니다. 그러나 이진 형식의 논리적 복제는 더 제한적입니다. 참조BINAGE
옵션토토 커뮤니티 생성
자세한 내용.
앞에서 언급했듯이 각 (활성) 토토 커뮤니티은 원격 (게시) 측면의 복제 슬롯으로부터 변경 사항을 수신합니다.
추가 테이블 동기화 슬롯은 일반적으로 과도하여 내부적으로 생성되어 초기 테이블 동기화를 수행하고 더 이상 필요하지 않을 때 자동으로 삭제됩니다. 이 테이블 동기화 슬롯은 이름을 생성했습니다.“pg_%u_sync_%u_%llu
”(매개 변수 : 토토 커뮤니티OID
, 테이블Relid
, 시스템 식별자Sysid
)
일반적으로 토토 커뮤니티을 사용하여 생성 될 때 원격 복제 슬롯이 자동으로 생성됩니다.토토 커뮤니티 생성
그리고 토토 커뮤니티을 사용하여 삭제하면 자동으로 삭제됩니다삭제 토토 커뮤니티
. 그러나 일부 상황에서는 토토 커뮤니티 및 기본 복제 슬롯을 별도로 조작하는 것이 유용하거나 필요할 수 있습니다. 몇 가지 시나리오는 다음과 같습니다.
토토 커뮤니티을 만들 때 복제 슬롯이 이미 존재합니다. 이 경우 토토 커뮤니티은를 사용하여 만들 수 있습니다.create_slot = false
기존 슬롯과 연결하는 옵션.
토토 커뮤니티을 만들 때 원격 호스트는 도달 할 수 없거나 불분명 한 상태입니다. 이 경우 토토 커뮤니티은를 사용하여 만들 수 있습니다.connect = false
옵션. 그런 다음 원격 호스트는 전혀 연락하지 않습니다. 이게pg_dump용도. 토토 커뮤니티을 활성화하기 전에 원격 복제 슬롯이 수동으로 생성되어야합니다.
토토 커뮤니티을 삭제하면 복제 슬롯을 유지해야합니다. 이는 가입자 데이터베이스가 다른 호스트로 이동하여 거기에서 활성화 될 때 유용 할 수 있습니다. 이 경우를 사용하여 토토 커뮤니티에서 슬롯을 분리하십시오.토토 커뮤니티
토토 커뮤니티을 삭제하기 전에.
토토 커뮤니티을 삭제하면 원격 호스트에 도달 할 수 없습니다. 이 경우를 사용하여 토토 커뮤니티에서 슬롯을 분리하십시오.토토 커뮤니티
토토 커뮤니티을 삭제하기 전에. 원격 데이터베이스 인스턴스가 더 이상 존재하지 않으면 추가 작업이 필요하지 않습니다. 그러나 원격 데이터베이스 인스턴스를 연락 할 수없는 경우 복제 슬롯 (및 나머지 테이블 동기화 슬롯)을 수동으로 삭제해야합니다. 그렇지 않으면/그들은 계속 WAL을 예약하고 결국 디스크가 채워질 수 있습니다. 이러한 경우는 신중하게 조사해야합니다.
게시자에서 테스트 테이블을 만듭니다.
test_pub =# 테이블 생성 t1 (a int, b 텍스트, 기본 키 (a)); 테이블을 만듭니다 test_pub =# 생성 테이블 t2 (c int, d 텍스트, 기본 키 (c)); 테이블을 만듭니다 test_pub =# 생성 테이블 t3 (e int, f 텍스트, 기본 키 (e)); 테이블 작성
가입자에 동일한 테이블을 만듭니다.
test_sub =# 테이블 생성 t1 (a int, b 텍스트, 기본 키 (a)); 테이블을 만듭니다 test_sub =# 생성 테이블 t2 (c int, d 텍스트, 기본 키 (c)); 테이블을 만듭니다 test_sub =# 생성 테이블 t3 (e int, f 텍스트, 기본 키 (e)); 테이블 작성
게시자 측의 테이블에 데이터를 삽입하십시오.
test_pub =# t1 값에 삽입 (1, one '), (2,'two '), (3,'Three '); 삽입 0 3 test_pub =# t2 값 (1, 'a'), (2, 'b'), (3, 'c')에 삽입; 삽입 0 3 test_pub =# t3 값 (1, 'i'), (2, 'ii'), (3, 'iii')에 삽입; 삽입 0 3
테이블에 대한 출판물을 만듭니다. 간행물pub2
andpub3a
일부를 허용하지 않음게시
운영. 출판물pub3b
행 필터가 있습니다 (참조섹션 29.4).
test_pub =# 표 T1 용 출판물 생성 Pub1; 출판물을 만듭니다 test_pub =# (publish = 'truncate')와 함께 표 t2 용 Pub2를 작성합니다. 출판물을 만듭니다 test_pub =# (publish = 'truncate')와 표 t3에 대한 pub3a를 작성합니다. 출판물을 만듭니다 test_pub =# 표 T3에 대한 pub3b 생성 (e 5); 출판물 만들기
출판물 토토 커뮤니티 생성. 토토 커뮤니티sub3
둘 다 토토 커뮤니티pub3a
andpub3b
. 모든 토토 커뮤니티은 기본적으로 초기 데이터를 복사합니다.
test_sub =# 토토 커뮤니티 sub1 생성 test_sub-# connection 'host = localhost dbname = test_pub application_name = sub1' test_sub-# publication pub1; 토토 커뮤니티 생성 test_sub =# 토토 커뮤니티 sub2 생성 test_sub-# connection 'host = localhost dbname = test_pub application_name = sub2' test_sub-# publication pub2; 토토 커뮤니티 생성 test_sub =# 토토 커뮤니티 sub3 생성 test_sub-# connection 'host = localhost dbname = test_pub application_name = sub3' test_sub-# publication pub3a, pub3b; 토토 커뮤니티 생성
초기 테이블 데이터가 복사되었는지 확인하십시오.게시
출판물 운영.
test_sub =# select * from t1; A | 비 ---+------ 1 | 하나 2 | 둘 3 | 삼 (3 줄) test_sub =# select * from t2; C | 디 ---+--- 1 | 에이 2 | 비 3 | 기음 (3 줄)
초기 데이터 사본이 무시하기 때문에게시
운영, 그리고 출판pub3a
행 필터가 없으므로 복사 된 테이블을 의미합니다T3
출판의 행 필터와 일치하지 않더라도 모든 행을 포함합니다pub3b
.
test_sub =# select * from t3; e | 에프 ---+----- 1 | 나 2 | II 3 | III (3 줄)
게시자 측의 테이블에 더 많은 데이터를 삽입합니다.
test_pub =# t1 값 (4, '4'), (5, '5'), (6, 'six')에 삽입; 삽입 0 3 test_pub =# t2 값 (4, 'd'), (5, 'e'), (6, 'f')에 삽입; 삽입 0 3 test_pub =# t3 값 (4, 'iv'), (5, 'v'), (6, 'vi')에 삽입; 삽입 0 3
이제 게시자 측 데이터는 다음과 같습니다.
test_pub =# select * from t1; A | 비 ---+------ 1 | 하나 2 | 둘 3 | 삼 4 | 네 5 | 다섯 6 | 육 (6 줄) test_pub =# select * from t2; C | 디 ---+--- 1 | 에이 2 | 비 3 | 기음 4 | 디 5 | 이자형 6 | 에프 (6 줄) test_pub =# select * from t3; e | 에프 ---+----- 1 | 나 2 | II 3 | III 4 | IV 5 | 다섯 6 | VI (6 줄)
정상 복제 중에 적절한 것을 관찰하십시오게시
작동이 사용됩니다. 이것은 출판물을 의미합니다pub2
andpub3a
복제하지 않습니다삽입
. 또한 출판물pub3b
의 행 필터와 일치하는 데이터 만 복제합니다.pub3b
. 이제 가입자 측 데이터는 다음과 같습니다.
test_sub =# select * from t1; A | 비 ---+------ 1 | 하나 2 | 둘 3 | 삼 4 | 네 5 | 다섯 6 | 육 (6 줄) test_sub =# select * from t2; C | 디 ---+--- 1 | 에이 2 | 비 3 | 기음 (3 줄) test_sub =# select * from t3; e | 에프 ---+----- 1 | 나 2 | II 3 | III 6 | VI (4 줄)
어떤 경우도 있습니다 (예 :섹션 29.2.1) 원격 복제 슬롯이 자동으로 생성되지 않은 경우 토토 커뮤니티을 활성화하기 전에 수동으로 생성해야합니다. 슬롯을 생성하고 토토 커뮤니티을 활성화하는 단계는 다음 예제에 나와 있습니다. 이 예제는 표준 논리 디코딩 출력 플러그인 (을 지정합니다.pgoutput
), 이것이 내장 논리 복제가 사용하는 것입니다.
먼저, 예제를 사용할 출판물을 만듭니다.
test_pub =# 모든 테이블에 대한 출판물 생성 pub1; 출판물 만들기
예 1 : 토토 커뮤니티이 말하는 곳connect = false
토토 커뮤니티 생성.
test_sub =# 토토 커뮤니티 sub1 생성 test_sub-# connection 'host = localhost dbname = test_pub' test_sub-# publication pub1 test_sub-# with (connect = false); 경고 : 토토 커뮤니티은 생성되었지만 연결되지 않았습니다 힌트 : 복제를 시작하려면 복제 슬롯을 수동으로 생성하고 토토 커뮤니티을 활성화하고 토토 커뮤니티을 새로 고침해야합니다. 토토 커뮤니티 생성
게시자에서 수동으로 슬롯을 만듭니다. 이름이 지정되지 않았기 때문에토토 커뮤니티 생성
, 생성 할 슬롯의 이름은 토토 커뮤니티 이름과 동일합니다 (예 : "sub1".
test_pub =# select * from pg_create_logical_replication_slot ( 'sub1', 'pgoutput'); slot_name | LSN -----------+---------- sub1 | 0/19404d0 (1 행)
가입자에서 토토 커뮤니티의 활성화를 완료하십시오. 이 후에의 테이블pub1
복제를 시작합니다.
test_sub =# Alter Subscription sub1 활성화; 토토 커뮤니티 변경 test_sub =# Alter Subscription Sub1 새로 고침 출판; 토토 커뮤니티 변경
예제 2 : 토토 커뮤니티이 말하는 곳connect = false
SLOT_NAME
옵션.
토토 커뮤니티 생성.
test_sub =# 토토 커뮤니티 sub1 생성 test_sub-# connection 'host = localhost dbname = test_pub' test_sub-# publication pub1 test_sub-# with (connect = false, slot_name = 'myslot'); 경고 : 토토 커뮤니티은 생성되었지만 연결되지 않았습니다 힌트 : 복제를 시작하려면 복제 슬롯을 수동으로 생성하고 토토 커뮤니티을 활성화하고 토토 커뮤니티을 새로 고침해야합니다. 토토 커뮤니티 생성
게시자에서 동안 지정된 동일한 이름을 사용하여 슬롯을 수동으로 만듭니다토토 커뮤니티 생성
, 예 : "myslot".
test_pub =# select * from pg_create_logical_replication_slot ( 'myslot', 'pgoutput'); slot_name | LSN -----------+---------- myslot | 0/19059A0 (1 행)
가입자에서 나머지 가입 활성화 단계는 이전과 동일합니다.
test_sub =# Alter Subscription sub1 활성화; 토토 커뮤니티 변경 test_sub =# Alter Subscription Sub1 새로 고침 출판; 토토 커뮤니티 변경
예 3 : 토토 커뮤니티이 지정하는 위치slot_name = none
토토 커뮤니티 생성. 언제slot_name = none
theenabled = false
및create_slot = false
또한 필요합니다.
test_sub =# 토토 커뮤니티 sub1 생성 test_sub-# connection 'host = localhost dbname = test_pub' test_sub-# publication pub1 test_sub-# with (slot_name = none, enabled = false, create_slot = false); 토토 커뮤니티 생성
게시자에서 예를 들어 이름을 사용하여 수동으로 슬롯을 만듭니다. "myslot".
test_pub =# select * from pg_create_logical_replication_slot ( 'myslot', 'pgoutput'); slot_name | LSN -----------+---------- myslot | 0/1905930 (1 행)
가입자에서 토토 커뮤니티을 방금 만든 슬롯 이름과 연결합니다.
test_sub =# Alter Subscription sub1 set (slot_name = 'myslot'); 토토 커뮤니티 변경
나머지 가입 활성화 단계는 이전과 동일합니다.
test_sub =# Alter Subscription sub1 활성화; 토토 커뮤니티 변경 test_sub =# Alter Subscription Sub1 새로 고침 출판; 토토 커뮤니티 변경
문서에 올바른 것이 없다면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면