Phiên bản được hỗ trợ:hiện tại(17) /16 / 15
Phiên bản phát triển:18 / Devel

29.4. Bộ lọc kèo bóng đá euro#

Theo mặc định, tất cả dữ liệu từ tất cả các kèo bóng đá euro được xuất bản sẽ được sao chép thành các thuê bao thích hợp. Dữ liệu được sao chép có thể được giảm bằng cách sử dụngBộ lọc kèo bóng đá euro. Người dùng có thể chọn sử dụng các bộ lọc kèo bóng đá euro cho lý do hành vi, bảo mật hoặc hiệu suất. Nếu một bảng được xuất bản đặt bộ lọc kèo bóng đá euro, một kèo bóng đá euro chỉ được sao chép nếu dữ liệu của nó thỏa mãn biểu thức bộ lọc kèo bóng đá euro. Điều này cho phép một tập hợp các bảng được sao chép một phần. Bộ lọc kèo bóng đá euro được xác định cho mỗi bảng. Sử dụng AWHEREmệnh đề sau tên bảng cho mỗi bảng được xuất bản yêu cầu dữ liệu được kèo bóng đá euro ra. TheWHEREmệnh đề phải được đặt bởi dấu ngoặc đơn. Nhìn thấyTạo ấn phẩmĐể biết chi tiết.

29.4.1. Quy tắc bộ lọc kèo bóng đá euro#

Bộ lọc kèo bóng đá euro được áp dụngtrướcXuất bản các thay đổi. Nếu bộ lọc kèo bóng đá euro đánh giá làSaihoặcnullSau đó, kèo bóng đá euro không được nhân rộng. TheWHEREBiểu thức mệnh đề được đánh giá với cùng một vai trò được sử dụng cho kết nối sao chép (nghĩa là vai trò được chỉ định trongKết nốimệnh đề củaTạo đăng ký). Bộ lọc kèo bóng đá euro không có tác dụng chocắt ngắnlệnh.

29.4.2. Hạn chế biểu thức#

TheWHEREmệnh đề chỉ cho phép các biểu thức đơn giản. Nó không thể chứa các chức năng, toán tử, loại và đối chiếu do người dùng xác định

Nếu một ấn phẩm xuất bảnCập nhậthoặcXóaHoạt động, Bộ lọc kèo bóng đá euroWHEREmệnh đề phải chỉ chứa các cột được bao phủ bởi danh tính bản sao (xemNhận dạng bản sao). Nếu một ấn phẩm chỉ xuất bảnChènHoạt động, Bộ lọc kèo bóng đá euroWHEREmệnh đề có thể sử dụng bất kỳ cột nào.

29.4.3. Cập nhật các biến đổi#

Bất cứ khi nàoCập nhậtđược xử lý, biểu thức bộ lọc kèo bóng đá euro được đánh giá cho cả kèo bóng đá euro cũ và kèo bóng đá euro mới (nghĩa là sử dụng dữ liệu trước và sau khi cập nhật). Nếu cả hai đánh giá làTRUE, nó sao chépCập nhậtThay đổi. Nếu cả hai đánh giá làSai, nó không sao chép thay đổi. Nếu chỉ một trong các kèo bóng đá euro cũ/mới phù hợp với biểu thức bộ lọc kèo bóng đá euro,Cập nhậtđược chuyển đổi thànhChènhoặcXóa, để tránh mọi sự không nhất quán về dữ liệu. kèo bóng đá euro trên thuê bao sẽ phản ánh những gì được xác định bởi biểu thức bộ lọc kèo bóng đá euro trên nhà xuất bản.

12048_12258Cập nhậtđược chuyển thành AXóa.

Nếu kèo bóng đá euro cũ không thỏa mãn biểu thức bộ lọc kèo bóng đá euro (nó không được gửi đến thuê bao) nhưng kèo bóng đá euro mới thì, từ góc độ thống nhất dữ liệu, kèo bóng đá euro mới nên được thêm vào thuê bao. Vì vậy,Cập nhậtđược chuyển thànhChèn.

kèo bóng đá euro 29.1Tóm tắt các phép biến đổi được áp dụng.

kèo bóng đá euro 29.1.Cập nhậtTóm tắt chuyển đổi

kèo bóng đá euro cũ kèo bóng đá euro mới Chuyển đổi
Không phù hợp Không phù hợp không sao chép
Không phù hợp khớp Chèn
khớp Không phù hợp Xóa
khớp Match Cập nhật

29.4.4. kèo bóng đá euro được phân vùng#

Nếu ấn phẩm chứa kèo bóng đá euro được phân vùng, tham số xuất bảnpublish_via_partition_rootXác định bộ lọc kèo bóng đá euro nào được sử dụng. Nếu nhưpublish_via_partition_rootTRUE, Thekèo bóng đá euro phân vùng gốcBộ lọc kèo bóng đá euro được sử dụng. Nếu không, nếupublish_via_partition_rootSai(mặc định), mỗiphân vùngBộ lọc kèo bóng đá euro được sử dụng.

29.4.5. Đồng bộ hóa dữ liệu ban đầu#

Nếu đăng ký yêu cầu sao chép dữ liệu kèo bóng đá euro đã tồn tại trước và một ấn phẩm chứaWHEREmệnh đề, chỉ dữ liệu thỏa mãn các biểu thức bộ lọc kèo bóng đá euro được sao chép vào thuê bao.

Nếu đăng ký có một số ấn phẩm trong đó một kèo bóng đá euro đã được xuất bản với khác nhauWHEREmệnh đề, kèo bóng đá euro thỏa mãnbất kỳcủa các biểu thức sẽ được sao chép. Nhìn thấyPhần 29.4.6Để biết chi tiết.

Cảnh báo

Vì đồng bộ hóa dữ liệu ban đầu không tính đếnxuất bảnTham số Khi sao chép dữ liệu bảng hiện tại, một số kèo bóng đá euro có thể được sao chép không được sao chép bằng DML. Tham khảoPhần 29.8.1, và xemPhần 29.2.2cho các ví dụ.

Lưu ý

Nếu thuê bao trong bản phát hành trước 15, hãy sao chép dữ liệu tồn tại trước không sử dụng các bộ lọc kèo bóng đá euro ngay cả khi chúng được xác định trong ấn phẩm. Điều này là do các bản phát hành cũ chỉ có thể sao chép toàn bộ dữ liệu bảng.

29.4.6. Kết hợp nhiều bộ lọc kèo bóng đá euro#

Nếu đăng ký có một số ấn phẩm trong đó cùng một bảng đã được xuất bản với các bộ lọc kèo bóng đá euro khác nhau (cho cùng mộtxuất bảnHoạt động), những biểu thức đó có được với nhau, để các kèo bóng đá euro thỏa mãnanycủa các biểu thức sẽ được nhân rộng. Điều này có nghĩa là tất cả các bộ lọc kèo bóng đá euro khác cho cùng một bảng trở nên dư thừa nếu:

  • Một trong những ấn phẩm không có bộ lọc kèo bóng đá euro.

  • Một trong những ấn phẩm đã được tạo bằng cách sử dụngcho tất cả các kèo bóng đá euro. Mệnh đề này không cho phép các bộ lọc kèo bóng đá euro.

  • Một trong những ấn phẩm đã được tạo bằng cách sử dụngĐối với các kèo bóng đá euro trong lược đồvà bảng thuộc về lược đồ được giới thiệu. Mệnh đề này không cho phép các bộ lọc kèo bóng đá euro.

29.4.7. Ví dụ#

Tạo một số kèo bóng đá euro sẽ được sử dụng trong các ví dụ sau.

test_pub =# Tạo kèo bóng đá euro T1 (A Int, B Int, C văn bản, Khóa chính (A, C));
Tạo kèo bóng đá euro
test_pub =# Tạo kèo bóng đá euro T2 (d int, e int, f int, khóa chính (d));
Tạo kèo bóng đá euro
test_pub =# tạo kèo bóng đá euro t3 (g int, h int, i int, phím chính (g));
Tạo kèo bóng đá euro

Tạo một số ấn phẩm. Xuất bảnP1Có một kèo bóng đá euro (T1) Và bảng đó có bộ lọc kèo bóng đá euro. Xuất bảnP2có hai kèo bóng đá euro. BànT1không có bộ lọc kèo bóng đá euro và bảngT2có bộ lọc kèo bóng đá euro. Xuất bảnP3Có hai bảng và cả hai đều có bộ lọc kèo bóng đá euro.

test_pub =# Tạo ấn phẩm P1 cho kèo bóng đá euro T1 trong đó (a 5 và c = 'nsw');
Tạo ấn phẩm
test_pub =# Tạo ấn phẩm P2 cho kèo bóng đá euro T1, T2 trong đó (E = 99);
Tạo ấn phẩm
test_pub =# Tạo ấn phẩm P3 cho kèo bóng đá euro T2 trong đó (d = 10), T3 trong đó (g = 10);
Tạo ấn phẩm

PSQLcó thể được sử dụng để hiển thị các biểu thức bộ lọc kèo bóng đá euro (nếu được xác định) cho mỗi ấn phẩm.

test_pub =# \ DRP+
                               Xuất bản P1
  Chủ sở hữu | Tất cả các kèo bóng đá euro | Chèn | Cập nhật | Xóa | Cắt ngắn | Thông qua root
----------+------------+---------+---------+---------+-----------+--------------
 Postgres | f | t | t | t | t | f
kèo bóng đá euro:
    "public.t1" ở đâu ((a 5) và (c = 'nsw' :: văn bản)))

                               Xuất bản P2
  Chủ sở hữu | Tất cả các kèo bóng đá euro | Chèn | Cập nhật | Xóa | Cắt ngắn | Thông qua root
----------+------------+---------+---------+---------+-----------+--------------
 Postgres | f | t | t | t | t | f
kèo bóng đá euro:
    "public.t1"
    "public.t2" ở đâu (e = 99)

                               Ấn phẩm P3
  Chủ sở hữu | Tất cả các kèo bóng đá euro | Chèn | Cập nhật | Xóa | Cắt ngắn | Thông qua root
----------+------------+---------+---------+---------+-----------+--------------
 Postgres | f | t | t | t | t | f
kèo bóng đá euro:
    "public.t2" ở đâu (d = 10)
    "public.t3" ở đâu (g = 10)

PSQLcó thể được sử dụng để hiển thị các biểu thức bộ lọc kèo bóng đá euro (nếu được xác định) cho mỗi bảng. Xem bảng đóT1là thành viên của hai ấn phẩm, nhưng chỉ có bộ lọc kèo bóng đá euro trongP1. Xem kèo bóng đá euro đóT2là thành viên của hai ấn phẩm và có bộ lọc kèo bóng đá euro khác nhau trong mỗi bộ phận.

test_pub =# \ d t1
                 kèo bóng đá euro "public.t1"
 Cột |  Loại | Đối chiếu | Vô hiệu | Mặc định
--------+---------+-----------+----------+---------
 A | Số nguyên |           | không phải null |
 B | Số nguyên |           |          |
 C | Văn bản |           | không phải null |
Chỉ mục:
    Khóa chính "T1_PKEY", Btree (A, C)
Ấn phẩm:
    "P1" ở đâu ((a 5) và (c = 'nsw' :: văn bản))
    "P2"

test_pub =# \ d t2
                 kèo bóng đá euro "public.t2"
 Cột |  Loại | Đối chiếu | Vô hiệu | Mặc định
--------+---------+-----------+----------+---------
 D | Số nguyên |           | không phải null |
 E | Số nguyên |           |          |
 f | Số nguyên |           |          |
Chỉ mục:
    Khóa chính "T2_PKEY", Btree (D)
Ấn phẩm:
    "P2" ở đâu (E = 99)
    "P3" ở đâu (d = 10)

test_pub =# \ d t3
                 kèo bóng đá euro "public.t3"
 Cột |  Loại | Đối chiếu | Vô hiệu | Mặc định
--------+---------+-----------+----------+---------
 g | Số nguyên |           | không phải null |
 H | Số nguyên |           |          |
 Tôi | Số nguyên |           |          |
Chỉ mục:
    Khóa chính "T3_PKEY", Btree (G)
Ấn phẩm:
    "P3" ở đâu (g = 10)

Trên nút thuê bao, tạo kèo bóng đá euroT1Với định nghĩa tương tự như trên nhà xuất bản và cũng tạo đăng kýS1Đăng ký xuất bảnP1.

test_sub =# Tạo kèo bóng đá euro T1 (A Int, B Int, C văn bản, Khóa chính (A, C));
Tạo kèo bóng đá euro
test_sub =# Tạo đăng ký S1
test_sub-# kết nối 'host = localhost dbname = test_pub applice_name = s1'
test_sub-# xuất bản P1;
Tạo đăng ký

Chèn một số kèo bóng đá euro. Chỉ các kèo bóng đá euro thỏa mãnT1 trong đómệnh đề xuất bảnP1được sao chép.

test_pub =# chèn vào các giá trị T1 (2, 102, 'nsw');
Chèn 0 1
test_pub =# chèn vào các giá trị T1 (3, 103, 'qld');
Chèn 0 1
test_pub =# chèn vào các giá trị T1 (4, 104, 'Vic');
Chèn 0 1
test_pub =# chèn vào các giá trị T1 (5, 105, 'hành động');
Chèn 0 1
test_pub =# chèn vào các giá trị T1 (6, 106, 'nsw');
Chèn 0 1
test_pub =# chèn vào các giá trị T1 (7, 107, 'nt');
Chèn 0 1
test_pub =# chèn vào các giá trị T1 (8, 108, 'qld');
Chèn 0 1
test_pub =# chèn vào các giá trị T1 (9, 109, 'nsw');
Chèn 0 1

test_pub =# Chọn * từ T1;
 A |  B |  c
---+-----+-----
 2 | 102 | NSW
 3 | 103 | QLD
 4 | 104 | Vic
 5 | 105 | HÀNH ĐỘNG
 6 | 106 | NSW
 7 | 107 | Nt
 8 | 108 | QLD
 9 | 109 | NSW
(8 kèo bóng đá euro)
test_sub =# Chọn * từ T1;
 A |  B |  c
---+-----+-----
 6 | 106 | NSW
 9 | 109 | NSW
(2 kèo bóng đá euro)

Cập nhật một số dữ liệu, trong đó kèo bóng đá euro cũ và mới có giá trị cả hai thỏa mãnT1 trong đómệnh đề xuất bảnP1. TheCập nhậtsao chép thay đổi như bình thường.

test_pub =# cập nhật T1 Đặt b = 999 trong đó a = 6;
Cập nhật 1

test_pub =# Chọn * từ T1;
 A |  B |  c
---+-----+-----
 2 | 102 | NSW
 3 | 103 | QLD
 4 | 104 | Vic
 5 | 105 | HÀNH ĐỘNG
 7 | 107 | Nt
 8 | 108 | QLD
 9 | 109 | NSW
 6 | 999 | NSW
(8 kèo bóng đá euro)
test_sub =# Chọn * từ T1;
 A |  B |  c
---+-----+-----
 9 | 109 | NSW
 6 | 999 | NSW
(2 kèo bóng đá euro)

Cập nhật một số dữ liệu, trong đó các giá trị kèo bóng đá euro cũ không thỏa mãnT1 trong đómệnh đề xuất bảnP1, nhưng các giá trị kèo bóng đá euro mới sẽ thỏa mãn nó. TheCập nhậtđược chuyển thànhChènvà thay đổi được nhân rộng. Xem kèo bóng đá euro mới trên thuê bao.

test_pub =# cập nhật T1 Đặt A = 555 trong đó a = 2;
Cập nhật 1

test_pub =# Chọn * từ T1;
  A |  B |  c
-----+-----+-----
   3 | 103 | QLD
   4 | 104 | Vic
   5 | 105 | HÀNH ĐỘNG
   7 | 107 | Nt
   8 | 108 | QLD
   9 | 109 | NSW
   6 | 999 | NSW
 555 | 102 | NSW
(8 kèo bóng đá euro)
test_sub =# Chọn * từ T1;
  A |  B |  c
-----+-----+-----
   9 | 109 | NSW
   6 | 999 | NSW
 555 | 102 | NSW
(3 kèo bóng đá euro)

Cập nhật một số dữ liệu, trong đó các giá trị kèo bóng đá euro cũ thỏa mãnT1 trong đómệnh đề xuất bảnP1, nhưng các giá trị kèo bóng đá euro mới không thỏa mãn nó. TheCập nhậtđược biến thành AXóavà thay đổi được nhân rộng. Xem rằng kèo bóng đá euro bị xóa khỏi thuê bao.

test_pub =# cập nhật t1 set c = 'Vic' trong đó a = 9;
Cập nhật 1

test_pub =# Chọn * từ T1;
  A |  B |  c
-----+-----+-----
   3 | 103 | QLD
   4 | 104 | Vic
   5 | 105 | HÀNH ĐỘNG
   7 | 107 | Nt
   8 | 108 | QLD
   6 | 999 | NSW
 555 | 102 | NSW
   9 | 109 | Vic
(8 kèo bóng đá euro)
test_sub =# Chọn * từ T1;
  A |  B |  c
-----+-----+-----
   6 | 999 | NSW
 555 | 102 | NSW
(2 kèo bóng đá euro)

Các ví dụ sau đây cho thấy cách tham số xuất bảnpublish_via_partition_rootXác định xem bộ lọc kèo bóng đá euro của bảng cha hoặc con sẽ được sử dụng trong trường hợp bảng được phân vùng.

Tạo kèo bóng đá euro được phân vùng trên nhà xuất bản.

test_pub =# Tạo kèo bóng đá euro cha (khóa chính int) phân vùng theo phạm vi (a);
Tạo kèo bóng đá euro
test_pub =# Tạo kèo bóng đá euro phân vùng con của mặc định cha;
Tạo kèo bóng đá euro

Tạo cùng một kèo bóng đá euro trên thuê bao.

test_sub =# Tạo kèo bóng đá euro cha (khóa chính int) phân vùng theo phạm vi (a);
Tạo kèo bóng đá euro
test_sub =# Tạo kèo bóng đá euro phân vùng con của mặc định cha mẹ;
Tạo kèo bóng đá euro

Tạo ấn phẩmP4, và sau đó đăng ký vào nó. Tham số xuất bảnpublish_via_partition_rootđược đặt là đúng. Có các bộ lọc kèo bóng đá euro được xác định trên cả hai bảng được phân vùng (Cha mẹ) và trên phân vùng (con).

test_pub =# Tạo ấn phẩm P4 cho cha mẹ trong đó (a <5), con trong đó (a = 5)
test_pub-# với (publish_via_partition_root = true);
Tạo ấn phẩm
test_sub =# Tạo đăng ký S4
test_sub-# kết nối 'host = localhost dbname = test_pub applice_name = s4'
test_sub-# xuất bản P4;
Tạo đăng ký

Chèn một số giá trị trực tiếp vàocha mẹconBảng. Họ sao chép bằng bộ lọc kèo bóng đá euro củacha mẹ(vìpublish_via_partition_rootlà đúng).

test_pub =# chèn vào các giá trị cha mẹ (2), (4), (6);
Chèn 0 3
test_pub =# chèn vào các giá trị con (3), (5), (7);
Chèn 0 3

test_pub =# select * từ thứ tự cha của a;
 Một
---
 2
 3
 4
 5
 6
 7
(6 kèo bóng đá euro)
test_sub =# Chọn * từ thứ tự cha của A;
 Một
---
 2
 3
 4
(3 kèo bóng đá euro)

Lặp lại cùng một bài kiểm tra, nhưng với giá trị khác vớipublish_via_partition_root. Tham số xuất bảnpublish_via_partition_rootđược đặt là sai. Bộ lọc kèo bóng đá euro được xác định trên phân vùng (con).

test_pub =# thả xuất bản P4;
Thả xuất bản
test_pub =# Tạo ấn phẩm P4 cho cha mẹ, con trong đó (a = 5)
test_pub-# với (publish_via_partition_root = false);
Tạo ấn phẩm
test_sub =# thay đổi đăng ký S4 Xuất bản làm mới;
Thay đổi đăng ký

Thực hiện các phần chèn trên nhà xuất bản giống như trước đây. Họ sao chép bằng bộ lọc kèo bóng đá euro củacon(vìpublish_via_partition_rootlà sai).

test_pub =# cha mẹ cắt ngắn;
Bàn cắt ngắn
test_pub =# chèn vào các giá trị cha (2), (4), (6);
Chèn 0 3
test_pub =# chèn vào các giá trị con (3), (5), (7);
Chèn 0 3

test_pub =# select * từ thứ tự cha của a;
 Một
---
 2
 3
 4
 5
 6
 7
(6 kèo bóng đá euro)
test_sub =# select * từ đơn kèo bóng đá euro con của a;
 Một
---
 5
 6
 7
(3 kèo bóng đá euro)

Gửi hiệu chỉnh

Nếu bạn thấy bất cứ điều gì trong tài liệu không chính xác, không phù hợp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử dụngMẫu nàyĐể báo cáo vấn đề tài liệu.