이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 47.6. 논리적 디코딩 무지개 토토 사이트 순위 플러그인버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

46.6. 논리적 디코딩 출력 플러그인

예제 출력 플러그인은에서 찾을 수 있습니다.토토 캔 : 문서 : 9.5 : test_dePostgreSQL 소스 트리의 하위 디렉토리.

46.6.1. 초기화 함수

출력 플러그인 이름을 라이브러리 기본 이름으로 공유 라이브러리를 동적으로로드하여 출력 플러그인이로드됩니다. 일반 라이브러리 검색 경로는 라이브러리를 찾는 데 사용됩니다. 필요한 출력 플러그인 콜백을 제공하고 라이브러리가 실제로 출력 플러그인임을 나타내려면_pg_output_plugin_init. 이 함수는 개별 동작에 대한 콜백 함수 포인터로 채워야하는 구조물이 전달됩니다.

typedef struct outputplugincallbacks

    logicaldecodestartupcb startup_cb;
    logicaldecodebegincb begin_cb;
    logicaldecodecha무지개 토토ecb cha무지개 토토e_cb;
    logicaldecodecommitcb commit_cb;
    logicaldecodefilterbyorigincb filter_by_origin_cb;
    logicaldecodeshutdowncb shutdown_cb;
 outputplugincallbacks;

typedef void ( *logicaloutputplugininit) (struct outputplugincallbacks *cb);

thebegin_cb, Cha무지개 토토e_CBandCommit_CB콜백이 필요합니다.startup_cb, filter_by_origin_cbandshutdown_cb선택 사항입니다.

46.6.2. 기능

디코딩, 형식 및 출력 변경을 위해 출력 플러그인은 호출 출력 기능을 포함하여 대부분의 백엔드의 일반 인프라를 사용할 수 있습니다. 읽기 만으로만 관계에 대한 액세스만이 허용됩니다.initdbinPG_CATALOG스키마 또는 사용자가 제공하는 카탈로그 테이블로 표시되어

ALTER TABLE USER_CATALOG_TABLE SET (user_catalog_table = true);
(user_catalog_table = true)를 사용하여 다른 _catalog_table (data text); 테이블을 만듭니다.

거래 ID 할당으로 이어지는 모든 조치는 금지됩니다. 여기에는 테이블 작성, DDL 변경 수행 및 통화가 포함됩니다.TXID_CURRENT ().

46.6.3. 출력 모드

출력 플러그인 콜백은 거의 임의의 형식으로 소비자에게 데이터를 전달할 수 있습니다. SQL을 통한 변경 사항보기와 같은 일부 사용 사례의 경우 임의의 데이터를 포함 할 수있는 데이터 유형에서 데이터를 반환합니다 (예 :BYTEA)는 번거 롭습니다. 출력 플러그인이 서버 인코딩에서 텍스트 데이터 만 출력하는 경우 설정하여를 선언 할 수 있습니다outputpluginoptions.output_typetooutput_plugin_textual_output대신output_plugin_binary_outputin시작 콜백. 이 경우 모든 데이터는 서버 인코딩에 있어야합니다.텍스트Datum은 그것을 포함 할 수 있습니다. 이것은 Assertion 지원 빌드에서 확인됩니다.

46.6.4. 출력 플러그인 콜백

출력 플러그인은 제공 해야하는 다양한 콜백을 통해 발생하는 변경 사항에 대해 알림을받습니다.

동시 트랜잭션은 커밋 순서로 해독되며 특정 트랜잭션에 속하는 변경 사항만이 사이에 해독됩니다.시작and커밋콜백. 명시 적으로 또는 암시 적으로 롤백 된 거래는 디코딩되지 않습니다. 성공적인 저장 포인트는 해당 거래 내에서 실행 된 순서대로 포함 된 트랜잭션으로 접 힙니다.

참고 :디스크로 이미 안전하게 플러시 된 트랜잭션 만 디코딩됩니다. 그것은로 이어질 수 있습니다.커밋직접 다음에 즉시 디코딩되지 않음pg_logical_slot_get_cha무지개 토토es ()언제synchronous_commit로 설정되었습니다OFF.

46.6.4.1. 시작 콜백

선택 사항startup_cb콜백은 복제 슬롯이 생성되거나 스트리밍을 요청할 때마다 호출됩니다.

typedef void ( *logicaldecodestartUpcb) (struct logicaldecodingcontext *ctx,
                                        outputpluginoptions *옵션,
                                        bool is_init);

theis_init복제 슬롯이 생성되고 그렇지 않으면 거짓이 될 때 매개 변수가 사실이됩니다.옵션출력 플러그인이 설정할 수있는 옵션 구조를 가리 킵니다.

typedef struct outputpluginoptions

    outputpluginoutputtype output_type;
 outputpluginoptions;

output_type|output_plugin_textual_output또는output_plugin_binary_output. 참조 참조섹션 46.6.3.

시작 콜백은에 존재하는 옵션을 검증해야합니다.ctx- output_plugin_options. 출력 플러그인에 상태가 있어야하는 경우 사용할 수 있습니다ctx- output_plugin_private저장하려면

46.6.4.2. 종료 콜백

선택 사항shutdown_cb콜백은 이전의 활성 복제 슬롯이 더 이상 사용되지 않을 때마다 호출되며 출력 플러그인에 리소스를 개인화하는 데 사용할 수 있습니다. 슬롯이 반드시 떨어지지 않아도되며 스트리밍이 중지됩니다.

typedef void ( *logicaldecodeshutdowncb) (struct logicaldecodingcontext *ctx);

46.6.4.3. 거래 시작 콜백

필수begin_cb콜백은 커밋 된 트랜잭션의 시작이 해독 될 때마다 호출됩니다. 중단 된 거래와 해당 내용은 디코딩되지 않습니다.

typedef void ( *logicaldecodebegincb) (struct logicaldecodingcontext *ctx,
                                      REARDERBUFFERTXN *TXN);

theTXN매개 변수는 거래에 대한 메타 정보가 포함되어 있습니다.

46.6.4.4. 거래 종료 콜백

필수Commit_CB트랜잭션 커밋이 디코딩 될 때마다 콜백이 호출됩니다. 그만큼Cha무지개 토토e_CB수정 된 행이 있으면 모든 수정 된 행에 대한 콜백이 호출되었습니다.

typedef void ( *logicaldecodecommitcb) (struct logicaldecodingcontext *ctx,
                                       REARDERBUFFERTXN *TXN,
                                       xlogrecptr commit_lsn);

46.6.4.5. 콜백 변경

필수Cha무지개 토토e_CB거래 내의 모든 개별 행 수정에 대해 콜백이 호출됩니다.삽입, 업데이트또는삭제. 원래 명령이 한 번에 여러 행을 수정하더라도 콜백은 각 행에 대해 개별적으로 호출됩니다.

typedef void ( *logicaldecodechangecb) (struct logicaldecodingcontext *ctx,
                                       REARDERBUFFERTXN *TXN,
                                       관계 관계,
                                       REARDERBUFFERCHANGE *Change);

theCTXTXN매개 변수는와 동일한 내용을 갖습니다.begin_cbandCommit_CB콜백, 그러나 또한 관계 설명자관계행이 속한 관계와 구조물을 가리 킵니다변경행 수정이 전달됩니다.

참고 :응하지 않은 사용자 정의 테이블의 변경 사항 (참조미등록) 임시가 아님 (참조임시또는temp) 논리적 디코딩을 사용하여 추출 할 수 있습니다.

46.6.4.6. 원래 필터 콜백

선택 사항filter_by_origin_cb콜백이 호출되어Origin_id출력 플러그인에 관심이 있습니다.

typedef bool ( *logicaldecodefilterbyorigincb) (struct logicaldecodingcontext *ctx,
                                               reporiginid origin_id);

theCTX매개 변수는 다른 콜백과 동일한 내용을 가지고 있습니다. 정보는 없지만 원점을 사용할 수 있습니다. 노드에서 전달 된 변화가 관련이 없다는 것을 알리기 위해, true를 반환하여 필터링됩니다. 그렇지 않으면 거짓. 다른 콜백은 필터링 된 트랜잭션 및 변경에 대해 요구되지 않습니다.

이것은 계단식 또는 다 방향 복제 솔루션을 구현할 때 유용합니다. 원점에 의한 필터링을 사용하면 그러한 설정에서 동일한 변경 사항을 앞뒤로 복제하는 것을 방지 할 수 있습니다. 트랜잭션 및 변경 사항도 원점에 대한 정보를 제공하지만이 콜백을 통한 필터링은 더욱 효율적입니다.

46.6.5. 출력 생성 기능

실제로 출력을 생성하려면 출력 플러그인이 데이터를 쓸 수 있습니다.StringInfo출력 버퍼에서ctx- out내부에있을 때begin_cb, Commit_CB또는Cha무지개 토토e_CB콜백. 출력 버퍼에 쓰기 전에outputpluginpreparewrite (ctx, last_write)호출해야하고 버퍼에 쓰기를 마친 후outputpluginWrite (CTX, Last_Write)쓰기를 수행하려면 호출되어야합니다. 그만큼last_write특정 쓰기가 콜백의 마지막 쓰기인지 여부를 나타냅니다.

다음 예제는 출력 플러그인의 소비자에게 데이터를 출력하는 방법을 보여줍니다.

outputpluginpreparewrite (ctx, true);
AppendStringInfo (ctx- out, "시작 %u", txn- xid);
OutputPlugInwrite (CTX, True);