논리적 복제는 가입자 노드에서 로컬로 변경 되더라도 데이터가 업데이트 될 것이라는 점에서 일반 DML 작업과 유사하게 동작합니다. 들어오는 데이터가 제약을 위반하면 복제가 중지됩니다. 이것은 A라고합니다.갈등. 복제 할 때업데이트
또는삭제
운영, 누락 된 데이터도로 간주됩니다.갈등, 그러나 오류가 발생하지 않으며 그러한 작업이 단순히 건너 뜁니다.
추가 로깅이 트리거되고 충돌 통계가 수집됩니다 (pg_stat_subscription_stats
보기) 다음의갈등케이스 :
insert_exists
#a를 위반하는 행 삽입연기가 없음
고유 한 제약 조건. 원점을 기록하고 충돌 키의 타임 스탬프 세부 정보를 커밋하려면track_commit_timestamp
가입자에서 활성화해야합니다. 이 경우 충돌이 수동으로 해결 될 때까지 오류가 발생합니다.
update_origin_differs
#이전에 다른 원점에 의해 이전에 수정 된 행을 업데이트합니다. 이 충돌은 일 때만 감지 될 수 있습니다.track_commit_timestamp
가입자에서 활성화되어 있습니다. 현재 업데이트는 로컬 행의 원점에 관계없이 항상 적용됩니다.
update_exists
#행의 업데이트 된 값은 a를 위반합니다.연기가되지 않음
고유 한 제약 조건. 원점을 기록하고 충돌 키의 타임 스탬프 세부 정보를 커밋하려면track_commit_timestamp
가입자에서 활성화해야합니다. 이 경우 충돌이 수동으로 해결 될 때까지 오류가 발생합니다. 파티션 된 테이블을 업데이트 할 때 업데이트 된 행 값이 다른 파티션 제약 조건을 충족시켜 행이 새 파티션에 삽입되도록합니다.insert_exists
새 행이 a를 위반하는 경우 갈등이 발생할 수 있습니다.연기가되지 않음
고유 한 제약 조건.
update_missing
#업데이트 할 튜플은 찾을 수 없었습니다. 이 시나리오에서는 업데이트가 단순히 건너 뜁니다.
delete_origin_differs
#다른 원점에 의해 이전에 수정 된 행을 삭제합니다. 이 충돌은 일 때만 감지 될 수 있습니다.track_commit_timestamp
가입자에서 활성화되어 있습니다. 현재 삭제는 로컬 행의 원점에 관계없이 항상 적용됩니다.
delete_missing
#삭제할 튜플은 찾을 수 없었습니다. 삭제는이 시나리오에서 단순히 건너 뜁니다.
multiple_unique_conflicts
#행을 삽입하거나 업데이트하면 여러 차례 위반연기가되지 않음
고유 한 제약. 원점을 기록하고 충돌하는 키의 타임 스탬프 세부 정보를 제공하려면track_commit_timestamp
가입자에서 활성화되어 와이즈 토토. 이 경우 충돌이 수동으로 해결 될 때까지 오류가 발생합니다.
제외 제약 위반과 같은 다른 충돌 시나리오가 와이즈 토토. 현재 로그에 추가 세부 정보를 제공하지 않습니다.
논리 복제 충돌의 로그 형식은 다음과 같습니다.
로그 : 관계에 대한 갈등 "Schemaname
.TableName
": Conflict =COLLICT_TYPE
세부 사항 :Detail_Explanation
.detail_values
[; ...].여기서detail_values
중 하나입니다.키
(column_name
[, ...]) = (column_value
[, ...])기존 지역 튜플
[(column_name
[, ...]) =] (column_value
[, ...])원격 튜플
[(column_name
[, ...]) =] (column_value
[, ...])복제 아이덴티티
(column_name
[, ...]) = (column_value
[, ...]) | 가득한 [(column_name
[, ...]) =] (column_value
[, ...])
로그는 다음 정보를 제공합니다.
log
Schemaname
.TableName
갈등과 관련된 지역 관계를 식별합니다.
COLLICT_TYPE
발생한 갈등 유형입니다 (예 :insert_exists
, update_exists
).
세부 사항
Detail_Explanation
기존 로컬 튜플을 수정 한 트랜잭션의 원점, 트랜잭션 ID 및 커밋 타임 스탬프가 포함되어 와이즈 토토.
the키
섹션에는 고유 한 제약 조건을 위반 한 로컬 튜플의 주요 값이 포함되어 와이즈 토토.insert_exists
, update_exists
또는multiple_unique_conflicts
갈등.
the기존 지역 튜플
섹션은 원격 튜플과 다른 경우 로컬 튜플이 포함되어 있습니다.update_origin_differs
또는delete_origin_differs
충돌 또는 키 값이 원격 튜플과 충돌하는 경우insert_exists
, update_exists
또는multiple_unique_conflicts
갈등.
the원격 튜플
섹션에는 충돌을 일으킨 원격 삽입 또는 업데이트 작업의 새 튜플이 포함되어 있습니다. 업데이트 작업의 경우 값이 변하지 않고 구운 경우 새 튜플의 열 값이 무효화됩니다.
the복제 아이덴티티
섹션에는 업데이트 또는 삭제할 기존 로컬 튜플을 검색하는 데 사용 된 복제 아이덴티티 키 값이 포함되어 있습니다. 로컬 관계에 표시되는 경우 전체 튜플 값이 포함될 수 있습니다.복제 아이덴티티 전체
.
column_name
열 이름입니다. 을 위한기존 지역 튜플
, 원격 튜플
및복제 아이덴티티 전체
케이스, 열 이름은 사용자가 테이블의 모든 열에 액세스 할 권한이 부족한 경우에만 기록됩니다. 열 이름이 있으면 해당 열 값과 동일한 순서로 나타납니다.
column_value
는 열 값입니다. 큰 열 값은 64 바이트로 잘립니다.
의 경우multiple_unique_conflicts
갈등, 다중Detailed_Explanation
anddetail_values
라인이 생성되며, 각각 고유 한 고유 한 제약과 관련된 충돌 정보를 자세히 설명합니다.
논리 복제 작업은 구독을 소유 한 역할의 권한으로 수행됩니다. 대상 테이블의 권한 실패는 활성화 된대로 복제 충돌을 일으 킵니다PostgreSQL : 문서 : 18 : 5.9. 보안 무지개 토토 행구독 소유자가 대상이되는 대상 테이블에서 정책이 일반적으로 거부할지 여부에 관계없이삽입
, 업데이트
, 삭제
또는19899_19909
복제 중입니다. 로드 레벨 보안에 대한이 제한은 향후에서 해제 될 수 와이즈 토토.PostgreSQL.
오류를 일으키는 충돌은 복제를 중지합니다. 사용자가 수동으로 해결해야합니다. 충돌에 대한 자세한 내용은 가입자의 서버 로그에서 찾을 수 와이즈 토토.
해상도는 가입자에 대한 데이터 또는 권한을 변경하여 들어오는 변경과 충돌하지 않도록하거나 기존 데이터와 충돌하는 트랜잭션을 건너 뛰면 수행 할 수 있습니다. 충돌이 오류가 발생하면 복제가 진행되지 않으며 논리적 복제 작업자는 가입자의 서버 로그에 다음과 같은 메시지를 방출합니다.
오류 : "public.test"관계에서 감지 된 충돌 : 충돌 = insert_exists 세부 사항 : 키는 이미 고유 한 인덱스 "T_PKEY"로 존재하며, 2024-06-26 10 : 47 : 04.727375+08에서 트랜잭션 740에서 로컬로 수정되었습니다. 키 (c) = (1); 기존 지역 튜플 (1, 'local'); 원격 튜플 (1, '원격'). 컨텍스트 : 복제 원본 원격 데이터 처리 "PG_16395"복제 대상 관계 "public.test"에 "삽입"중 "PG_16395"트랜잭션 725에서 0/14C0378에서 완료되었습니다
제약 조건을 위반하는 변경 사항을 포함하는 트랜잭션의 LSN과 복제 원점 이름은 서버 로그 (LSN 0/14C0378 및 복제 원본에서 찾을 수 와이즈 토토.PG_16395
위의 경우). 충돌을 일으킨 거래는 사용하여 건너 뛸 수 있습니다구독 변경 ... skip
마무리 LSN (즉, LSN 0/14C0378). 마무리 LSN은 트랜잭션이 게시자에게 커밋되거나 준비되는 LSN 일 수 있습니다. 또는 거래를로 호출하여 거래를 건너 뛸 수도 있습니다.pg_replication_origin_advance ()
함수. 이 기능을 사용하기 전에 구독은에 의해 일시적으로 비활성화되어야합니다.구독 변경 ... 비활성화
또는 가입은와 함께 사용할 수 있습니다.disable_on_error
옵션. 그런 다음 사용할 수 와이즈 토토pg_replication_origin_advance ()
node_name
(예 :PG_16395
) 및 마무리 LSN의 다음 LSN (즉, 0/14C0379). 기원의 현재 위치는에서 볼 수 있습니다.시스템보기. 전체 트랜잭션을 건너 뛰는 데는 제약 조건을 위반하지 않을 수있는 변경 사항을 건너 뛰는 것이 포함됩니다. 이것은 가입자를 쉽게 일치하지 않을 수 있습니다. 원산지 및 커밋 타임 스탬프와 같은 충돌 행에 대한 추가 세부 사항은에서 볼 수 있습니다.
세부 사항
로그의 선. 그러나이 정보는에만 사용할 수 와이즈 토토.track_commit_timestamp
가입자에서 활성화되어 와이즈 토토. 사용자는이 정보를 사용하여 로컬 변경을 유지할지 여부를 결정하거나 원격 변경을 채택 할 수 와이즈 토토. 예를 들어,세부 사항
위 로그의 선은 기존 행이 로컬로 수정되었음을 나타냅니다. 사용자는 수동으로 원격 변화를 수행 할 수 와이즈 토토.
언제스트리밍
모드는병렬
, 실패한 트랜잭션의 마무리 LSN은 기록되지 않을 수 있습니다. 이 경우 스트리밍 모드를로 변경해야 할 수도 있습니다.on
또는OFF
그리고 실패한 트랜잭션의 마무리 LSN이 서버 로그에 기록됩니다. 마무리 LSN 사용은 참조하십시오.메이저 토토 사이트 PostgreSQL
.