기본적으로 게시 된 모든 테이블의 모든 데이터는 적절한 가입자에게 복제됩니다. A를 사용하여 복제 된 데이터를 줄일 수 있습니다.행 토토 커뮤니티. 사용자는 행동, 보안 또는 성능 이유에 행 토토 커뮤니티를 사용하도록 선택할 수 있습니다. 게시 된 테이블이 행 토토 커뮤니티를 설정하면 데이터가 행 토토 커뮤니티 표현식을 만족시키는 경우에만 행이 복제됩니다. 이를 통해 테이블 세트를 부분적으로 복제 할 수 있습니다. 행 토토 커뮤니티는 테이블마다 정의됩니다. A 사용여기서
데이터를 토토 커뮤니티링 해야하는 각 게시 된 각 테이블의 테이블 이름을 따르는 조항. 그만큼여기서
절은 괄호로 둘러싸여 있어야합니다. 보다출판물 만들기자세한 내용.
행 토토 커뮤니티가 적용 됨전변경 사항 게시. 행 토토 커뮤니티가 평가하는 경우거짓
또는NULL
그러면 행이 복제되지 않습니다. 그만큼여기서
조항 표현식은 복제 연결에 사용 된 것과 동일한 역할을 통해 평가됩니다 (즉,Connection
조항구독 생성). 행 토토 커뮤니티는에 영향을 미치지 않습니다.Truncate
명령.
the여기서
절은 간단한 표현 만 허용합니다. 사용자 정의 기능, 운영자, 유형 및 콜라주, 시스템 열 참조 또는 상상할 수없는 내장 기능을 포함 할 수 없습니다.
출판물이 게시 된 경우업데이트
또는삭제
작동, 행 토토 커뮤니티여기서
조항은 복제 아이덴티티에 의해 다루는 열만 포함해야합니다 (참조복제 아이덴티티
). 출판물이 전용으로 게시하는 경우삽입
작동, 행 토토 커뮤니티여기서
조항은 모든 열을 사용할 수 있습니다.
언제든지업데이트
가 처리되면, 행 토토 커뮤니티 표현식은 구형 및 새 행 모두에 대해 평가됩니다 (즉, 업데이트 전후 데이터 사용). 두 평가가 모두true
, 그것은를 복제합니다.업데이트
변경. 두 평가가 모두false
, 변경 사항을 복제하지 않습니다. 구식/새 행 중 하나만 행 토토 커뮤니티 표현식과 일치하는 경우업데이트
삽입
또는삭제
, 데이터 불일치를 피하기 위해. 가입자의 행은 게시자의 행 토토 커뮤니티 표현식에 의해 정의 된 내용을 반영해야합니다.
이전 행이 행 토토 커뮤니티 표현식을 만족시키는 경우 (가입자에게 전송) 새 행은 데이터 일관성 관점에서 구독자에서 제거되어야합니다. 그래서업데이트
|삭제
.
이전 행이 행 토토 커뮤니티 표현식을 만족시키지 않으면 (구독자에게 전송되지 않았다) 새 행은 데이터 일관성 관점에서 새 행을 가입자에게 추가해야합니다. 그래서업데이트
삽입
.
표 29.1적용된 변환을 요약합니다.
표 29.1. 업데이트
변환 요약
Old Row | New Row | 변환 |
---|---|---|
경기 없음 | 경기 없음 | 복제하지 마십시오 |
경기 없음 | 매치 | 삽입 |
매치 | 경기 없음 | 삭제 |
매치 | 매치 | 업데이트 |
간행물에 분할 된 테이블이 포함 된 경우 게시 매개 변수publish_via_partition_root
사용되는 행 토토 커뮤니티를 결정합니다. 만약에publish_via_partition_root
istrue
, The루트 파티션 테이블행 토토 커뮤니티가 사용됩니다. 그렇지 않으면, ifpublish_via_partition_root
is거짓
(기본값), 각파티션행 토토 커뮤니티가 사용됩니다.
구독에 기존 테이블 데이터를 복사하고 출판물에 포함되어있는 경우여기서
조항, 행 토토 커뮤니티 표현식을 만족시키는 데이터 만 가입자에게 복사됩니다.
구독에 테이블이 다른 것으로 게시 된 여러 간행물이있는 경우여기서
조항, 만족하는 행Any표현식이 복사됩니다. 보다섹션 29.4.6자세한 내용.
초기 데이터 동기화가 고려되지 않기 때문에게시
매개 변수 기존 테이블 데이터를 복사 할 때 DML을 사용하여 복제되지 않는 일부 행을 복사 할 수 있습니다. 참조섹션 29.8.1,섹션 29.2.2예제.
가입자가 15 세 이전에 릴리스에 있으면 기존 데이터 복사는 출판물에 정의 된 경우에도 행 토토 커뮤니티를 사용하지 않습니다. 이전 릴리스는 전체 테이블 데이터 만 복사 할 수 있기 때문입니다.
구독에 동일한 테이블이 다른 행 토토 커뮤니티로 게시 된 여러 개의 간행물이있는 경우 (동일하게게시
Operation), 그 표현이 함께 오게되므로 행이 만족스러워Any표현식이 복제됩니다. 이것은 동일한 테이블의 다른 행 토토 커뮤니티가 다음과 같은 경우 중복됩니다.
간행물 중 하나에는 행 토토 커뮤니티가 없습니다.
출판물 중 하나가를 사용하여 작성되었습니다.모든 테이블의 경우
. 이 조항은 행 토토 커뮤니티를 허용하지 않습니다.
출판물 중 하나가를 사용하여 만들어졌습니다.스키마 테이블
그리고 테이블은 참조 스키마에 속합니다. 이 조항은 행 토토 커뮤니티를 허용하지 않습니다.
다음 예제에서 사용할 테이블을 만듭니다.
test_pub =# 테이블 생성 t1 (a int, b int, c 텍스트, 기본 키 (a, c)); 테이블을 만듭니다 test_pub =# 생성 테이블 t2 (d int, e int, f int, 기본 키 (d)); 테이블을 만듭니다 test_pub =# 생성 테이블 t3 (g int, h int, i int, 1 차 키 (g)); 테이블 작성
일부 출판물을 만듭니다. 출판P1
하나의 테이블이 있습니다 (T1
) 해당 테이블에는 행 토토 커뮤니티가 있습니다. 출판P2
두 개의 테이블이 있습니다. 테이블T1
행 토토 커뮤니티가없고 테이블이 없습니다T2
행 토토 커뮤니티가 있습니다. 출판P3
두 개의 테이블이 있으며 둘 다 행 토토 커뮤니티가 있습니다.
test_pub =# 표 T1에 대한 출판 p1을 만듭니다 (a 5 및 c = 'nsw'); 출판물을 만듭니다 test_pub =# 표 T1, t2에 대한 출판물 생성 P2 (e = 99); 출판물을 만듭니다 test_pub =# 표 T2에 대한 출판물 p3를 만듭니다 (d = 10), t3 여기서 (g = 10); 출판물 만들기
PSQL
각 간행물에 대한 행 토토 커뮤니티 표현식 (정의 된 경우)을 표시하는 데 사용할 수 있습니다.
test_pub =# \ drp+ 간행물 P1 소유자 | 모든 테이블 | 삽입 | 업데이트 | 삭제 | 잘린 | 루트를 통해 -------------------+---------+--------+---------------------------------------------------------------------- Postgres | f | t | t | t | t | 에프 테이블 : "public.t1"여기서 ((A 5) 및 (C = 'NSW':: 텍스트)) 간행물 P2 소유자 | 모든 테이블 | 삽입 | 업데이트 | 삭제 | 잘린 | 루트를 통해 -------------------+---------+--------+---------------------------------------------------------------------- Postgres | f | t | t | t | t | 에프 테이블 : "public.t1" "public.t2"여기서 (E = 99) 간행물 P3 소유자 | 모든 테이블 | 삽입 | 업데이트 | 삭제 | 잘린 | 루트를 통해 -------------------+---------+--------+---------------------------------------------------------------------- Postgres | f | t | t | t | t | 에프 테이블 : "public.t2"여기서 (d = 10) "public.t3"여기서 (g = 10)
PSQL
각 테이블의 행 토토 커뮤니티 표현식 (정의 된 경우)을 표시하는 데 사용할 수 있습니다. 그 표를 참조하십시오T1
두 개의 간행물의 회원이지만에만 행 토토 커뮤니티가 있습니다.P1
. 그 표를 참조하십시오T2
두 개의 간행물의 회원이며 각각에 다른 행 토토 커뮤니티가 있습니다.
test_pub =# \ d t1 "public.t1"테이블 열 | 유형 | Collation | 무효 | 기본 --------+--------+------------------------------- A | 정수 | | NOL NULL | B | 정수 | | | C | 텍스트 | | NOL NULL | 인덱스 : "T1_PKEY"1 차 키, BTREE (A, C) 간행물 : "P1"여기서 ((A 5) 및 (C = 'NSW':: Text))) "P2" test_pub =# \ d t2 "public.t2"테이블 열 | 유형 | Collation | 무효 | 기본 --------+--------+------------------------------- d | 정수 | | NOL NULL | e | 정수 | | | f | 정수 | | | 인덱스 : "T2_PKEY"1 차 키, BTREE (D) 간행물 : "P2"여기서 (E = 99) "P3"여기서 (D = 10) test_pub =# \ d t3 "public.t3"테이블 열 | 유형 | Collation | 무효 | 기본 --------+--------+------------------------------- g | 정수 | | NOL NULL | H | 정수 | | | i | 정수 | | | 인덱스 : "T3_PKEY"1 차 키, BTREE (G) 간행물 : "P3"여기서 (g = 10)
가입자 노드에서 테이블 작성T1
게시자의 것과 동일한 정의를 가진 구독S1
출판물 구독P1
.
test_sub =# 테이블 생성 t1 (a int, b int, c 텍스트, 기본 키 (a, c)); 테이블을 만듭니다 test_sub =# 구독 생성 S1 test_sub-# connection 'host = localhost dbname = test_pub application_name = s1' test_sub-# publication p1; 구독 생성
일부 행을 삽입하십시오. 만족하는 줄만T1 여기서
출판 조항P1
복제되었습니다.
test_pub =# t1 값에 삽입 (2, 102, 'NSW'); 삽입 0 1 test_pub =# t1 값에 삽입 (3, 103, 'qld'); 삽입 0 1 test_pub =# t1 값에 삽입 (4, 104, 'vic'); 삽입 0 1 test_pub =# t1 값에 삽입 (5, 105, 'act'); 삽입 0 1 test_pub =# t1 값에 삽입 (6, 106, 'nsw'); 삽입 0 1 test_pub =# t1 값에 삽입 (7, 107, 'nt'); 삽입 0 1 test_pub =# t1 값에 삽입 (8, 108, 'qld'); 삽입 0 1 test_pub =# t1 값에 삽입 (9, 109, 'NSW'); 삽입 0 1 test_pub =# select * from t1; A | B | 기음 ---+-----+----- 2 | 102 | NSW 3 | 103 | QLD 4 | 104 | 빅 5 | 105 | 행동 6 | 106 | NSW 7 | 107 | NT 8 | 108 | QLD 9 | 109 | NSW (8 줄)
test_sub =# select * from t1; A | B | 기음 ---+-----+----- 6 | 106 | NSW 9 | 109 | NSW (2 줄)
구식 및 새 행 값이 모두 만족하는 일부 데이터를 업데이트합니다T1 여기서
출판 조항P1
. 그만큼업데이트
변경 사항을 정상적으로 복제합니다.
test_pub =# 업데이트 t1 set b = 999 여기서 a = 6; 업데이트 1 test_pub =# select * from t1; A | B | 기음 ---+-----+----- 2 | 102 | NSW 3 | 103 | QLD 4 | 104 | 빅 5 | 105 | 행동 7 | 107 | NT 8 | 108 | QLD 9 | 109 | NSW 6 | 999 | NSW (8 줄)
test_sub =# select * from t1; A | B | 기음 ---+-----+----- 9 | 109 | NSW 6 | 999 | NSW (2 줄)
이전 행 값이 만족하지 않은 일부 데이터를 업데이트합니다T1 여기서
출판 조항P1
, 그러나 새로운 행 값은이를 만족시킵니다. 그만큼업데이트
삽입
그리고 변경이 복제됩니다. 가입자의 새 행을 참조하십시오.
test_pub =# 업데이트 t1 설정 a = 555 여기서 a = 2; 업데이트 1 test_pub =# select * from t1; A | B | 기음 -----+-----+----- 3 | 103 | QLD 4 | 104 | 빅 5 | 105 | 행동 7 | 107 | NT 8 | 108 | QLD 9 | 109 | NSW 6 | 999 | NSW 555 | 102 | NSW (8 줄)
test_sub =# select * from t1; A | B | 기음 -----+-----+----- 9 | 109 | NSW 6 | 999 | NSW 555 | 102 | NSW (3 줄)
이전 행 값이 만족 한 일부 데이터 업데이트t1 여기서
출판 조항P1
그러나 새 행 값은이를 충족시키지 못합니다. 그만큼업데이트
|삭제
그리고 변경이 복제됩니다. 가입자에서 행이 제거 된 것을 확인하십시오.
test_pub =# 업데이트 t1 set c = 'vic'여기서 a = 9; 업데이트 1 test_pub =# select * from t1; A | B | 기음 -----+-----+----- 3 | 103 | QLD 4 | 104 | 빅 5 | 105 | 행동 7 | 107 | NT 8 | 108 | QLD 6 | 999 | NSW 555 | 102 | NSW 9 | 109 | 빅 (8 줄)
test_sub =# select * from t1; A | B | 기음 -----+-----+----- 6 | 999 | NSW 555 | 102 | NSW (2 줄)
다음 예제는 게시 매개 변수를 보여줍니다.publish_via_partition_root
분할 된 테이블의 경우 부모 또는 자식 테이블의 행 토토 커뮤니티가 사용되는지 여부를 결정합니다.
게시자에 파티션 된 테이블을 만듭니다.
test_pub =# 범위별로 테이블 부모 (int 기본 키) 파티션 (a); 테이블을 만듭니다 test_pub =# Parent Default의 테이블 자식 자식 생성; 테이블 작성
가입자에 동일한 테이블을 만듭니다.
test_sub =# 테이블 작성 부모 (int 기본 키) 범위별로 파티션 (a); 테이블을 만듭니다 test_sub =# Parent Default의 테이블 자식 자식 생성; 테이블 작성
출판물 만들기P4
를 구독하십시오. 게시 매개 변수publish_via_partition_root
는 참으로 설정되었습니다. 분할 된 테이블 모두에 정의 된 행 토토 커뮤니티가 있습니다 (부모
) 및 파티션 (Child
).
test_pub =# 테이블 부모에 대한 출판물 P4 (a <5), Child Where (a = 5) test_pub-# with (publish_via_partition_root = true); 출판물 만들기
test_sub =# 구독 S4 생성 test_sub-# connection 'host = localhost dbname = test_pub application_name = s4' test_sub-# publication p4; 구독 생성
직접 값을 직접 삽입부모
andChild
테이블. 그들은의 행 토토 커뮤니티를 사용하여 복제합니다.부모
(왜냐하면publish_via_partition_root
사실).
test_pub =# 부모 값 (2), (4), (6)에 삽입; 삽입 0 3 test_pub =# 자식 값에 삽입 (3), (5), (7); 삽입 0 3 test_pub =# select *에서 a; 에이 --- 2 3 4 5 6 7 (6 줄)
test_sub =# select *에서 a로 부모 주문에서; 에이 --- 2 3 4 (3 줄)
동일한 테스트를 반복하지만 다른 값이 다른publish_via_partition_root
. 게시 매개 변수publish_via_partition_root
는 False로 설정됩니다. 행 토토 커뮤니티는 파티션에 정의됩니다 (Child
).
test_pub =# 드롭 출판 P4; 드롭 출판 test_pub =# 테이블 부모, 자녀에 대한 출판물 생성 P4 (a = 5) test_pub-# with (publish_via_partition_root = false); 출판물 만들기
test_sub =# 구독 S4 새로 고침 출판; 구독 변경
이전과 동일하게 게시자의 삽입물을 수행하십시오. 그들은의 행 토토 커뮤니티를 사용하여 복제합니다.Child
(왜냐하면publish_via_partition_root
거짓).
test_pub =# truncate parent; 절단 테이블 test_pub =# 부모 값 (2), (4), (6)에 삽입; 삽입 0 3 test_pub =# 자식 값에 삽입 (3), (5), (7); 삽입 0 3 test_pub =# select *에서 a; 에이 --- 2 3 4 5 6 7 (6 줄)
test_sub =# 선택 * 자식 주문에서 a; 에이 --- 5 6 7 (3 줄)
올바르지 않은 문서에 아무것도 표시되면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면