기본적으로 모든 게시된 테이블의 모든 데이터는 해당 구독자에게 복제됩니다. 복제된 데이터는 다음을 사용하여 줄일 수 있습니다.행 스포츠 토토. 사용자는 행동, 보안 또는 성능상의 이유로 행 스포츠 토토를 사용하도록 선택할 수 있습니다. 게시된 테이블에 행 스포츠 토토가 설정되면 해당 데이터가 행 스포츠 토토 식을 충족하는 경우에만 행이 복제됩니다. 이를 통해 테이블 세트를 부분적으로 복제할 수 있습니다. 행 스포츠 토토는 테이블별로 정의됩니다. 를 사용하세요어디에서8419_8518어디에서절은 괄호로 묶어야 합니다. 참조출판물 작성자세한 내용은.
행 스포츠 토토가 적용되었습니다이전에변경사항 게시 중. 행 스포츠 토토가 다음과 같이 평가되는 경우거짓또는NULL그러면 행이 복제되지 않습니다.어디절 표현식은 복제 연결에 사용된 것과 동일한 역할(즉,연결의 절구독 작성). 행 스포츠 토토는 다음 항목에 적용되지 않습니다.잘라내기명령.
그어디절은 간단한 표현식만 허용합니다. 사용자 정의 함수, 연산자, 유형 및 데이터 정렬, 시스템 열 참조 또는 불변 내장 함수를 포함할 수 없습니다.
간행물이 게시되는 경우업데이트또는삭제작업, 행 스포츠 토토어디절에는 복제본 ID가 적용되는 열만 포함되어야 합니다(참조복제본 ID). 출판물이 출판 전용인 경우삽입작업, 행 스포츠 토토어디절은 모든 열을 사용할 수 있습니다.
언제든지업데이트이 처리되면 행 스포츠 토토 표현식은 이전 행과 새 행 모두에 대해 평가됩니다(즉, 업데이트 전후의 데이터 사용). 두 평가가 모두 다음과 같은 경우참, 이는 다음을 복제합니다.업데이트변경. 두 평가가 모두 다음과 같은 경우거짓, 변경 사항을 복제하지 않습니다. 이전/새 행 중 하나만 행 스포츠 토토 표현식과 일치하는 경우,업데이트다음으로 변환됨삽입또는삭제, 데이터 불일치를 방지합니다. 구독자의 행은 게시자의 행 스포츠 토토 표현식으로 정의된 내용을 반영해야 합니다.
이전 행이 행 스포츠 토토 표현식을 만족하지만(구독자에게 전송됨) 새 행이 그렇지 않으면 데이터 일관성 관점에서 이전 행을 구독자에서 제거해야 합니다. 그래서업데이트으로 변환됩니다.삭제.
이전 행이 행 스포츠 토토 표현식을 만족하지 않지만(구독자에게 전송되지 않음) 새 행이 만족한다면 데이터 일관성 관점에서 새 행이 구독자에 추가되어야 합니다. 그래서업데이트은로 변환됩니다.삽입.
표 29.1적용된 변환을 요약합니다.
표 29.1. 업데이트변환 요약
| 이전 행 | 새 행 | 변환 |
|---|---|---|
| 일치하지 않음 | 일치하지 않음 | 복제하지 않음 |
| 일치하지 않음 | 일치 | 삽입 |
| 일치 | 일치하지 않음 | 삭제 |
| 일치 | 일치 | 업데이트 |
게시물에 분할된 테이블이 포함된 경우 게시 매개변수publish_via_partition_root사용되는 행 스포츠 토토를 결정합니다. 만일publish_via_partition_rootis참, 그루트로 파티션을 나눈 테이블행 스포츠 토토가 사용되었습니다. 그렇지 않은 경우, 만약publish_via_partition_rootis거짓(기본값), 각각파티션의행 스포츠 토토가 사용되었습니다.
구독에 기존 테이블 데이터 복사가 필요하고 게시에 다음이 포함된 경우어디절, 행 스포츠 토토 표현식을 만족하는 데이터만 구독자에게 복사됩니다.
구독에 서로 다른 테이블이 게시된 여러 게시가 있는 경우어디절, 만족하는 행모든표현식이 복사됩니다. 참조섹션 29.4.6자세한 내용은.
초기 데이터 동기화는 다음을 고려하지 않기 때문입니다.게시매개변수를 사용하면 기존 테이블 데이터를 복사할 때 DML을 사용하여 복제되지 않는 일부 행이 복사될 수 있습니다. 참조섹션 29.9.1그리고 보세요섹션 29.2.2예를 들어.
구독자가 15 이전 릴리스인 경우 기존 데이터 복사는 발행물에 정의되어 있더라도 행 스포츠 토토를 사용하지 않습니다. 이전 릴리스에서는 전체 테이블 데이터만 복사할 수 있기 때문입니다.
구독에 동일한 테이블이 다른 행 스포츠 토토로 게시된 여러 게시가 있는 경우(동일한 경우게시연산), 해당 표현식은 OR로 연결되어 행이 만족됩니다.아무거나표현식이 복제됩니다. 이는 다음과 같은 경우 동일한 테이블의 다른 모든 행 스포츠 토토가 중복된다는 의미입니다.
게시물 중 하나에 행 스포츠 토토가 없습니다.
간행물 중 하나는 다음을 사용하여 생성되었습니다.모든 테이블에 대해. 이 절은 행 스포츠 토토를 허용하지 않습니다.
간행물 중 하나는 다음을 사용하여 생성되었습니다.스키마 테이블의 경우그리고 테이블은 참조된 스키마에 속합니다. 이 절은 행 스포츠 토토를 허용하지 않습니다.
다음 예에서 사용할 몇 가지 테이블을 생성하십시오.
/* pub # */ CREATE TABLE t1(a int, b int, c text, PRIMARY KEY(a,c)); /* pub # */ CREATE TABLE t2(d int, e int, f int, PRIMARY KEY(d)); /* pub # */ CREATE TABLE t3(g int, h int, i int, PRIMARY KEY(g));
간행물을 만드세요. 출판p1테이블이 하나 있습니다(t1) 해당 테이블에는 행 스포츠 토토가 있습니다. 출판p2테이블이 두 개 있습니다. 표t1행 스포츠 토토가 없고 테이블이 있음t2행 스포츠 토토가 있습니다. 출판p3두 개의 테이블이 있고 둘 다 행 스포츠 토토가 있습니다.
/* pub # */ 테이블 t1에 대한 출판 p1 생성 WHERE (a 5 AND c = 'NSW'); /* pub # */ 테이블 t1, t2 WHERE (e = 99)에 대한 출판 p2 생성; /* pub # */ 테이블 t2 WHERE (d = 10), t3 WHERE (g = 10)에 대한 출판 p3 생성;
psql각 게시에 대한 행 스포츠 토토 표현식(정의된 경우)을 표시하는 데 사용할 수 있습니다.
/* 술집 # */ \dRp+
출판물 p1
소유자 | 모든 테이블 | 삽입물 | 업데이트 | 삭제 | 잘림 | 생성된 열 | 루트를 통해
----------+------------+---------+---------+---------+---------+---------+------+------------
포스트그레스 | 에프 | 티 | 티 | 티 | 티 | 없음 | 에프
테이블:
"public.t1" WHERE ((a 5) AND (c = 'NSW'::text))
출판물 p2
소유자 | 모든 테이블 | 삽입물 | 업데이트 | 삭제 | 잘림 | 생성된 열 | 루트를 통해
----------+------------+---------+---------+---------+---------+---------+------+------------
포스트그레스 | 에프 | 티 | 티 | 티 | 티 | 없음 | 에프
테이블:
"공개.t1"
"public.t2" 어디(e = 99)
출판물 p3
소유자 | 모든 테이블 | 삽입물 | 업데이트 | 삭제 | 잘림 | 생성된 열 | 루트를 통해
----------+------------+---------+---------+---------+---------+---------+------+------------
포스트그레스 | 에프 | 티 | 티 | 티 | 티 | 없음 | 에프
테이블:
"public.t2" 어디(d = 10)
"public.t3" 어디(g = 10)
psql는 각 테이블에 대한 행 스포츠 토토 표현식(정의된 경우)을 표시하는 데 사용할 수 있습니다. 해당 표를 참조하세요.t1은 두 출판물의 구성원이지만 행 스포츠 토토는 다음에만 있습니다.p1. 해당 표를 참조하세요.t2은 두 출판물의 구성원이며 각각 다른 행 스포츠 토토를 가지고 있습니다.
/* 술집 # */ \d t1
테이블 "public.t1"
칼럼 | 유형 | 데이터 정렬 | 널 입력 가능 | 기본값
---------+---------+------------+----------+---------
| 정수 | | null이 아님 |
비 | 정수 | | |
c | 텍스트 | | null이 아님 |
인덱스:
"t1_pkey" 기본 키, btree(a, c)
출판물:
"p1" WHERE ((a 5) AND (c = 'NSW'::text))
"p2"
/* 술집 # */ \d t2
테이블 "public.t2"
칼럼 | 유형 | 데이터 정렬 | 널 입력 가능 | 기본값
---------+---------+------------+----------+---------
디 | 정수 | | null이 아님 |
전자 | 정수 | | |
에프 | 정수 | | |
인덱스:
"t2_pkey" 기본 키, btree(d)
출판물:
"p2" 어디서(e = 99)
"p3" 어디서(d = 10)
/* 술집 # */ \d t3
테이블 "public.t3"
칼럼 | 유형 | 데이터 정렬 | 널 입력 가능 | 기본값
---------+---------+------------+----------+---------
지 | 정수 | | null이 아님 |
시간 | 정수 | | |
나 | 정수 | | |
인덱스:
"t3_pkey" 기본 키, btree(g)
출판물:
"p3" 어디(g = 10)
구독자 노드에서 테이블을 생성하십시오.t1게시자의 정의와 동일한 정의를 사용하고 구독도 생성s1간행물을 구독하는 사람p1.
/* sub # */ CREATE TABLE t1(a int, b int, c text, PRIMARY KEY(a,c)); /* 하위 # */ 구독 만들기 s1 /* sub - */ CONNECTION 'host=localhost dbname=test_pub application_name=s1' /* 하위 - */ 출판물 p1;
일부 행을 삽입하세요. 를 만족하는 행만t1 어디게시 조항p1복제되었습니다.
/* pub # */ t1 값에 삽입(2, 102, 'NSW'); /* pub # */ INSERT INTO t1 VALUES (3, 103, 'QLD'); /* pub # */ INSERT INTO t1 VALUES (4, 104, 'VIC'); /* pub # */ INSERT INTO t1 VALUES (5, 105, 'ACT'); /* pub # */ INSERT INTO t1 VALUES (6, 106, 'NSW'); /* pub # */ INSERT INTO t1 VALUES (7, 107, 'NT'); /* pub # */ INSERT INTO t1 VALUES (8, 108, 'QLD'); /* pub # */ INSERT INTO t1 VALUES (9, 109, 'NSW'); /* pub # */ SELECT * FROM t1; | 비 | ㄷ ---+------+----- 2 | 102 | NSW 3 | 103 | 퀸즐랜드 4 | 104 | 빅 5 | 105 | 행위 6 | 106 | NSW 7 | 107 | NT 8 | 108 | 퀸즐랜드 9 | 109 | NSW (8행)
/* 하위 # */ SELECT * FROM t1; | 비 | ㄷ ---+------+----- 6 | 106 | NSW 9 | 109 | NSW (2행)
이전 행 값과 새 행 값이 모두 다음을 만족하는 일부 데이터를 업데이트합니다.t1 어디게시 조항p1.업데이트변경사항을 정상적으로 복제합니다.
/* pub # */ 업데이트 t1 SET b = 999 WHERE a = 6; /* pub # */ SELECT * FROM t1; | 비 | ㄷ ---+------+----- 2 | 102 | NSW 3 | 103 | 퀸즐랜드 4 | 104 | 빅 5 | 105 | 행위 7 | 107 | NT 8 | 108 | 퀸즐랜드 9 | 109 | NSW 6 | 999 | NSW (8행)
/* 하위 # */ SELECT * FROM t1; | 비 | ㄷ ---+------+----- 9 | 109 | NSW 6 | 999 | NSW (2행)
이전 행 값이 다음을 만족하지 않는 일부 데이터를 업데이트합니다.t1 어디게시 조항p1, 그러나 새 행 값은 이를 충족합니다.업데이트은로 변환됩니다.삽입그리고 변경사항이 복제됩니다. 구독자의 새 행을 확인하세요.
/* pub # */ 업데이트 t1 SET a = 555 WHERE a = 2; /* pub # */ SELECT * FROM t1; | 비 | ㄷ ----+------+----- 3 | 103 | 퀸즐랜드 4 | 104 | 빅 5 | 105 | 행위 7 | 107 | NT 8 | 108 | 퀸즐랜드 9 | 109 | NSW 6 | 999 | NSW 555 | 102 | NSW (8행)
/* 하위 # */ SELECT * FROM t1; | 비 | ㄷ ----+------+----- 9 | 109 | NSW 6 | 999 | NSW 555 | 102 | NSW (3행)
이전 행 값이 만족하는 일부 데이터 업데이트t1 어디게시 조항p1이지만 새 행 값이 이를 충족하지 않습니다.업데이트다음으로 변환됩니다.삭제그리고 변경사항이 복제됩니다. 구독자에서 행이 제거되었는지 확인하세요.
/* pub # */ 업데이트 t1 SET c = 'VIC' WHERE a = 9; /* pub # */ SELECT * FROM t1; | 비 | ㄷ ----+------+----- 3 | 103 | 퀸즐랜드 4 | 104 | 빅 5 | 105 | 행위 7 | 107 | NT 8 | 108 | 퀸즐랜드 6 | 999 | NSW 555 | 102 | NSW 9 | 109 | 빅 (8행)
/* 하위 # */ SELECT * FROM t1; | 비 | ㄷ ----+------+----- 6 | 999 | NSW 555 | 102 | NSW (2행)
다음 예는 게시 매개변수가 어떻게 작동하는지 보여줍니다.publish_via_partition_root분할된 테이블의 경우 상위 또는 하위 테이블의 행 스포츠 토토를 사용할지 여부를 결정합니다.
게시자에 분할된 테이블을 생성하십시오.
/* pub # */ CREATE TABLE parent(a int PRIMARY KEY) PARTITION BY RANGE(a); /* pub # */ 부모 DEFAULT의 테이블 하위 PARTITION 생성;
구독자에 동일한 테이블을 생성하십시오.
/* sub # */ CREATE TABLE parent(a int PRIMARY KEY) PARTITION BY RANGE(a); /* sub # */ CREATE TABLE 하위 PARTITION OF 상위 DEFAULT;
간행물 작성p4을 선택한 다음 구독하세요. 출판 매개변수publish_via_partition_root이 true로 설정되었습니다. 파티션을 나눈 테이블() 모두에 행 스포츠 토토가 정의되어 있습니다.부모) 및 파티션(아이).
/* pub # */ CREATE PUBLICATION p4 FOR TABLE 상위 WHERE(a < 5), 하위 WHERE(a = 5) /* pub - */ WITH (publish_via_partition_root=true);
/* 하위 # */ 구독 만들기 s4 /* sub - */ CONNECTION 'host=localhost dbname=test_pub application_name=s4' /* 하위 - */ 출판 p4;
일부 값을 다음에 직접 삽입부모그리고아이테이블. 그들은 다음의 행 스포츠 토토를 사용하여 복제합니다.부모(왜냐하면publish_via_partition_root사실입니다).
/* pub # */ 상위 값에 삽입 (2), (4), (6); /* pub # */ INSERT INTO 하위 VALUES (3), (5), (7); /* pub # */ SELECT * FROM parent ORDER BY a; 에 --- 2 3 4 5 6 7 (6행)
/* 하위 # */ SELECT * FROM 상위 ORDER BY a; 에 --- 2 3 4 (3행)
동일한 테스트를 반복하지만 다른 값을 사용하여publish_via_partition_root. 출판 매개변수publish_via_partition_root거짓으로 설정되었습니다. 행 스포츠 토토는 파티션()에 정의되어 있습니다.아이).
/* pub # */ 출판물 삭제 p4; /* pub # */ CREATE PUBLICATION p4 FOR TABLE 부모, 자식 WHERE (a = 5) /* pub - */ WITH (publish_via_partition_root=false);
/* 하위 # */ 구독 변경 s4 출판 새로고침;
이전과 동일하게 게시자에 삽입을 수행하십시오. 그들은 다음의 행 스포츠 토토를 사용하여 복제합니다.아이(왜냐하면publish_via_partition_root거짓입니다).
/* pub # */ TRUNCATE 상위; /* pub # */ INSERT INTO 상위 VALUES (2), (4), (6); /* pub # */ INSERT INTO 하위 VALUES (3), (5), (7); /* pub # */ SELECT * FROM parent ORDER BY a; 에 --- 2 3 4 5 6 7 (6행)
/* 하위 # */ SELECT * FROM child ORDER BY a; 에 --- 5 6 7 (3행)
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.