31.2. 신청#

a토토 커뮤니티는 논리적 복제의 다운 스트림 측면입니다. 토토 커뮤니티이 정의 된 노드를라고합니다.가입자. 토토 커뮤니티은 토토 커뮤니티하고자하는 다른 데이터베이스 및 출판물 세트 (하나 이상)에 대한 연결을 정의합니다.

가입자 데이터베이스는 다른 PostgreSQL 인스턴스와 동일한 방식으로 동작하며 자체 출판물을 정의하여 다른 데이터베이스의 게시자로 사용할 수 있습니다..

가입자 노드에는 원하는 경우 여러 개의 토토 커뮤니티이있을 수 있습니다. 단일 게시자-토토 커뮤니티자 쌍 사이의 여러 토토 커뮤니티을 정의 할 수 있습니다. 토토 커뮤니티 된 출판물 객체가 겹치지 않도록주의해야합니다.

각 토토 커뮤니티은 하나의 복제 슬롯을 통해 변경 사항을받습니다 (참조섹션 27.2.6). 기존 테이블 데이터의 초기 데이터 동기화에는 추가 복제 슬롯이 필요할 수 있으며 데이터 동기화 끝에 삭제됩니다.

논리적 복제 토토 커뮤니티은 동기 복제의 대기가 될 수 있습니다 (참조섹션 27.2.8). 대기 이름은 기본적으로 토토 커뮤니티 이름입니다. 대체 이름은로 지정할 수 있습니다.application_name토토 커뮤니티의 연결 정보에서.

토토 커뮤니티은 |pg_dump현재 사용자가 슈퍼 사용자 인 경우. 그렇지 않으면 경고가 작성되고 토토 커뮤니티이 건너 뜁니다. 비 슈퍼 사용자가에서 모든 토토 커뮤니티 정보를 읽을 수 없기 때문입니다.pg_subscription카탈로그

토토 커뮤니티은를 사용하여 추가됩니다.토토 커뮤니티 생성|토토 커뮤니티 변경명령 및 사용삭제 토토 커뮤니티.

토토 커뮤니티이 삭제되어 재현되면 동기화 정보가 손실됩니다. 이것은 데이터가 나중에 재 동기화되어야 함을 의미합니다.

스키마 정의는 복제되지 않으며 게시 된 테이블은 가입자에게 있어야합니다. 일반 테이블 만 복제의 대상 일 수 있습니다. 예를 들어,보기로 복제 할 수 없습니다.

테이블은 완전히 자격을 갖춘 테이블 이름을 사용하여 게시자와 가입자간에 일치합니다. 가입자의 다른 이름으로 표시된 테이블에 대한 복제는 지원되지 않습니다.

테이블의 열은 이름과 일치합니다. 가입자 테이블의 열 순서는 게시자의 열 순서와 일치 할 필요가 없습니다. 데이터의 데이터 유형은 데이터의 텍스트 표현을 대상 유형으로 변환 할 수있는 한 일치 할 필요가 없습니다. 예를 들어, 유형 열에서 복제 할 수 있습니다정수유형 열bigint. 대상 테이블에는 게시 된 테이블에서 제공되지 않은 추가 열이있을 수 있습니다. 이러한 열은 대상 테이블의 정의에 지정된 기본값으로 채워집니다. 그러나 이진 형식의 논리적 복제는 더 제한적입니다. 참조BINAGE옵션토토 커뮤니티 생성자세한 내용.

31.2.1. 복제 슬롯 관리#

앞에서 언급했듯이 각 (활성) 토토 커뮤니티은 리모컨 (게시)의 복제 슬롯으로부터 변경 사항을받습니다.

추가 테이블 동기화 슬롯은 일반적으로 과도하여 내부적으로 초기 테이블 동기화를 수행하고 더 이상 필요하지 않은 경우 자동으로 삭제됩니다. 이 테이블 동기화 슬롯은 이름을 생성했습니다.pg_%u_sync_%u_%llu(매개 변수 : 토토 커뮤니티OID, 표릴리드, 시스템 식별자Sysid)

일반적으로 토토 커뮤니티을 사용하여 생성 될 때 원격 복제 슬롯이 자동으로 생성됩니다토토 커뮤니티 생성그리고 토토 커뮤니티을 사용하여 삭제하면 자동으로 삭제됩니다삭제 삭제. 그러나 일부 상황에서는 토토 커뮤니티 및 기본 복제 슬롯을 별도로 조작하는 것이 유용하거나 필요할 수 있습니다. 몇 가지 시나리오는 다음과 같습니다.

  • 토토 커뮤니티을 만들 때 복제 슬롯이 이미 존재합니다. 이 경우 토토 커뮤니티은를 사용하여 만들 수 있습니다.create_slot = false기존 슬롯과 연결하는 옵션.

  • 토토 커뮤니티을 만들 때 원격 호스트는 도달 할 수 없거나 불분명 한 상태입니다. 이 경우 토토 커뮤니티은를 사용하여 만들 수 있습니다.connect = false옵션. 그런 다음 원격 호스트는 전혀 연락하지 않습니다. 이게pg_dump용도. 토토 커뮤니티을 활성화하기 전에 원격 복제 슬롯이 수동으로 생성되어야합니다.

  • 토토 커뮤니티을 삭제하면 복제 슬롯을 유지해야합니다. 이는 가입자 데이터베이스가 다른 호스트로 이동하여 거기에서 활성화 될 때 유용 할 수 있습니다. 이 경우를 사용하여 토토 커뮤니티에서 슬롯을 분리하십시오.토토 커뮤니티토토 커뮤니티을 삭제하기 전에.

  • 토토 커뮤니티을 삭제하면 원격 호스트에 도달 할 수 없습니다. 이 경우를 사용하여 토토 커뮤니티에서 슬롯을 분리하십시오.토토 커뮤니티토토 커뮤니티을 삭제하기 전에. 원격 데이터베이스 인스턴스가 더 이상 존재하지 않으면 추가 작업이 필요하지 않습니다. 그러나 원격 데이터베이스 인스턴스를 연락 할 수없는 경우 복제 슬롯 (및 나머지 테이블 동기화 슬롯)을 수동으로 삭제해야합니다. 그렇지 않으면/그들은 계속 WAL을 예약하고 결국 디스크가 채워질 수 있습니다. 이러한 경우는 신중하게 조사해야합니다.

31.2.2. 예 : 논리적 복제 설정#

게시자에서 테스트 테이블을 만듭니다.

test_pub =# 테이블 생성 t1 (in int, b 텍스트, 기본 키 (a));
테이블을 만듭니다
test_pub =# 생성 테이블 t2 (c int, d 텍스트, 기본 키 (c));
테이블을 만듭니다
test_pub =# 생성 테이블 t3 (e int, f 텍스트, 기본 키 (e));
테이블 작성

가입자에 동일한 테이블을 만듭니다.

test_sub =# 테이블 생성 t1 (in 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

테이블에 대한 출판물을 만듭니다. 간행물pub2andpub3a일부를 허용하지 않습니다게시운영. 출판물pub3b행 필터가 있습니다 (참조PostgreSQL : 문서 : 16 : 31.3. 행 토토 사이트 추천).

test_pub =# 표 T1 용 출판물 작성;
출판물을 만듭니다
test_pub =# (publish = 'truncate')와 함께 표 t2 용 Pub2를 작성합니다.
출판물을 만듭니다
test_pub =# (publish = 'truncate')와 표 t3에 대한 pub3a를 작성합니다.
출판물을 만듭니다
test_pub =# 표 T3에 대한 pub3b 생성 (e 5);
출판물 만들기

간행물 토토 커뮤니티 생성. 토토 커뮤니티sub3둘 다 토토 커뮤니티pub3aandpub3b. 모든 토토 커뮤니티은 기본적으로 초기 데이터를 복사합니다.

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 =# 선택 *에서 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 줄)

정상 복제 중에 적절한 것을 관찰하십시오게시작동이 사용됩니다. 이것은 출판물을 의미합니다pub2andpub3a복제하지 않습니다삽입. 또한 출판물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 줄)

31.2.3. 예 : 지연된 복제 슬롯 생성#

어떤 경우도 있습니다 (예 :섹션 31.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 = nonetheenabled = falsecreate_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 새로 고침 출판;
    토토 커뮤니티 변경

정정 제출

문서에 올바른 것이없는 것이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면