55.5. 논리적 스트리밍 복제 롤 토토

이 섹션에서는 다음에 의해 시작되는 메시지 흐름인 논리적 복제 프로토콜을 설명합니다.START_REPLICATION 슬롯 슬롯_이름 논리적복제 명령.

논리적 스트리밍 복제 프로토콜은 물리적 스트리밍 복제 프로토콜의 기본 요소를 기반으로 구축되었습니다.

포스트그레SQL논리적 디코딩은 출력 플러그인을 지원합니다.pgoutput은 내장된 논리적 복제에 사용되는 표준입니다.

55.5.1. 논리적 스트리밍 복제 매개변수

다음을 사용하여START_REPLICATION명령,pgoutput다음 옵션을 허용합니다:

proto_version

프로토콜 버전. 현재 버전1, 23지원됩니다. 유효한 버전이 필요합니다.

버전2서버 버전 14 이상에서만 지원되며 진행 중인 대규모 트랜잭션의 스트리밍을 허용합니다.

버전3서버 버전 15 이상에서만 지원되며 2단계 커밋 스트리밍을 허용합니다.

publication_names

구독(변경 사항 수신)할 출판 이름의 쉼표로 구분된 목록입니다. 개별 출판 이름은 표준 개체 이름으로 처리되며 필요에 따라 동일하게 인용할 수 있습니다. 출판물 이름이 하나 이상 필요합니다.

바이너리

바이너리 전송 모드를 사용하기 위한 부울 옵션입니다. 바이너리 모드는 텍스트 모드보다 빠르지만 약간 덜 강력합니다.

메시지

다음에 의해 작성된 메시지 전송을 활성화하는 부울 옵션pg_logical_emit_message.

스트리밍

진행 중인 트랜잭션의 스트리밍을 활성화하는 부울 옵션입니다. 이 기능을 켜려면 최소 프로토콜 버전 2가 필요합니다.

two_phase

2단계 트랜잭션을 활성화하는 부울 옵션. 이 기능을 켜려면 최소 프로토콜 버전 3이 필요합니다.

55.5.2. 논리적 복제 프로토콜 메시지

개별 프로토콜 메시지는 다음 하위 섹션에서 논의됩니다. 개별 메시지는에 설명되어 있습니다.PostgreSQL : 문서 : 15 : 55.9. 논리 복제 토토 캔 형식.

모든 최상위 프로토콜 메시지는 메시지 유형 바이트로 시작됩니다. 코드에서는 문자로 표시되지만 관련 인코딩이 없는 부호 있는 바이트입니다.

스트리밍 복제 프로토콜은 메시지 길이를 제공하므로 최상위 프로토콜 메시지가 헤더에 길이를 포함할 필요가 없습니다.

55.5.3. 논리적 복제 프로토콜 메시지 흐름

다음을 제외하고START_REPLICATION명령 및 재생 진행 메시지, 모든 정보는 백엔드에서 프런트엔드로만 흐릅니다.

논리적 복제 프로토콜은 개별 트랜잭션을 하나씩 보냅니다. 이는 Begin과 Commit 메시지 쌍 사이의 모든 메시지가 동일한 트랜잭션에 속함을 의미합니다. 마찬가지로 Begin prepare 메시지와 prepare 메시지 쌍 사이의 모든 메시지는 동일한 트랜잭션에 속합니다. 또한 한 쌍의 Stream Start 및 Stream Stop 메시지 간에 진행 중인 대규모 트랜잭션의 변경 사항을 보냅니다. 이러한 트랜잭션의 마지막 스트림에는 Stream Commit 또는 Stream Abort 메시지가 포함되어 있습니다.

전송된 모든 트랜잭션에는 0개 이상의 DML 메시지(삽입, 업데이트, 삭제)가 포함되어 있습니다. 계단식 설정의 경우 Origin 메시지도 포함될 수 있습니다. 원본 메시지는 트랜잭션이 다른 복제 노드에서 시작되었음을 나타냅니다. 논리적 복제 프로토콜 범위의 복제 노드는 거의 모든 것이 될 수 있으므로 유일한 식별자는 원본 이름입니다. 필요에 따라 이를 처리하는 것은 다운스트림의 책임입니다(필요한 경우). Origin 메시지는 항상 트랜잭션의 DML 메시지보다 먼저 전송됩니다.

모든 DML 메시지에는 작업이 수행된 게시자의 관계를 식별하는 관계 OID가 포함되어 있습니다. 주어진 관계 OID에 대한 첫 번째 DML 메시지 전에 해당 관계의 스키마를 설명하는 관계 메시지가 전송됩니다. 이어서, 마지막 관계 메시지가 전송된 이후 관계 정의가 변경된 경우 새 관계 메시지가 전송됩니다. (프로토콜은 클라이언트가 필요한 만큼의 관계에 대해 이 메타데이터를 기억할 수 있다고 가정합니다.)

관계 메시지는 OID로 열 유형을 식별합니다. 내장 유형의 경우 클라이언트가 해당 유형의 OID를 로컬로 조회할 수 있다고 가정하므로 추가 데이터가 필요하지 않습니다. 내장되지 않은 유형 OID의 경우 유형 메시지는 해당 OID와 연관된 유형 이름을 제공하기 위해 관계 메시지 전에 전송됩니다. 따라서 관계 열의 유형을 구체적으로 식별해야 하는 클라이언트는 Type 메시지의 내용을 캐시하고 먼저 해당 캐시를 참조하여 OID 유형이 거기에 정의되어 있는지 확인해야 합니다. 그렇지 않은 경우 로컬에서 OID 유형을 검색하세요.

수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.