Một plugin đầu tỷ lệ kèo bóng đá ví dụ có thể được tìm thấy trongPREDT/TEST_DECODING
Subdirectory của cây nguồn PostgreSQL.
Plugin đầu tỷ lệ kèo bóng đá được tải bằng cách tự động tải thư viện dùng chung với tên plugin đầu tỷ lệ kèo bóng đá làm tên cơ sở thư viện. Đường dẫn tìm kiếm thư viện thông thường được sử dụng để định vị thư viện._pg_output_plugin_init
. Hàm này được thông qua một cấu trúc cần được lấp đầy bằng các con trỏ chức năng tỷ lệ kèo bóng đá lại cho các hành động riêng lẻ.
Typedef Struct OutputPluginCallbacks
TheBEGIN_CB
, Change_cb
vàcam kết_cb
tỷ lệ kèo bóng đá lại là bắt buộc, trong khistartup_cb
, filter_by_origin_cb
, cắt ngắn_cb
vàshutdown_cb
là tùy chọn. Nếu nhưcắt ngắn_cb
không được đặt mà làcắt ngắn
sẽ được tỷ lệ kèo bóng đá mã, hành động sẽ bị bỏ qua.
Một plugin đầu tỷ lệ kèo bóng đá cũng có thể xác định các chức năng để hỗ trợ truyền phát các giao dịch lớn, đang tiến triển. Thestream_start_cb
, stream_stop_cb
, stream_abort_cb
, stream_commit_cb
, stream_change_cb
vàstream_prepare_cb
được yêu cầu, trong khistream_message_cb
vàstream_truncate_cb
là tùy chọn.
Một plugin đầu ra cũng có thể xác định các chức năng để hỗ trợ các cam kết hai pha, cho phép các hành động được tỷ lệ kèo bóng đá mã trênChuẩn bị giao dịch
. TheBEGIN_PREPARE_CB
, prepare_cb
, stream_prepare_cb
, cam kết_prepared_cb
vàrollback_prepared_cb
tỷ lệ kèo bóng đá lại là bắt buộc, trong khiFilter_Prepare_CB
là tùy chọn.
Để tỷ lệ kèo bóng đá mã, định dạng và thay đổi đầu ra, các plugin đầu ra có thể sử dụng hầu hết cơ sở hạ tầng bình thường của phụ trợ, bao gồm gọi các chức năng đầu ra. Chỉ đọc quyền truy cập vào các mối quan hệ được cho phép miễn là chỉ có các quan hệ được truy cập mà đã được tạo bởiinitDB
Trongpg_catalog
Schema hoặc đã được đánh dấu là các bảng danh mục được cung cấp của người dùng bằng cách sử dụng
thay đổi bảng user_catalog_table set (user_catalog_table = true);
Lưu ý rằng quyền truy cập vào bảng danh mục người dùng hoặc bảng danh mục hệ thống thông thường trong các plugin đầu tỷ lệ kèo bóng đá phải được thực hiện thông quasystable_*
Chỉ quét API. Truy cập quaHEAP_*
API quét sẽ lỗi. Ngoài tỷ lệ kèo bóng đá, bất kỳ hành động nào dẫn đến phân công ID giao dịch đều bị cấm.PG_CURRENT_XACT_ID ()
.
Gọi cho plugin đầu tỷ lệ kèo bóng đá có thể truyền dữ liệu cho người tiêu dùng ở các định dạng gần như tùy ý. Đối với một số trường hợp sử dụng, như xem các thay đổi thông qua SQL, trả về dữ liệu trong một loại dữ liệu có thể chứa dữ liệu tùy ý (ví dụ:bytea
) là cồng kềnh. Nếu plugin đầu tỷ lệ kèo bóng đá chỉ xuất dữ liệu văn bản trong mã hóa của máy chủ, thì có thể khai báo rằng bằng cách đặtOutputPlugInOptions.Output_Type
đếnoutput_plugin_textual_output
thay vìoutput_plugin_binary_output
trongtỷ lệ kèo bóng đá lại khởi động. Trong trường hợp đó, tất cả dữ liệu phải có trong mã hóa của máy chủ để AText
Datum có thể chứa nó. Điều này được kiểm tra trong các bản dựng hỗ trợ xác nhận.
Một plugin đầu tỷ lệ kèo bóng đá được thông báo về các thay đổi đang xảy tỷ lệ kèo bóng đá thông qua các cuộc gọi lại khác nhau mà nó cần cung cấp.
Giao dịch đồng thời được tỷ lệ kèo bóng đá mã theo thứ tự cam kết và chỉ các thay đổi thuộc về một giao dịch cụ thể được tỷ lệ kèo bóng đá mã giữabắt đầu
vàcam kết
gọi lại. Các giao dịch đã được cuộn trở lại rõ ràng hoặc ngầm không bao giờ được tỷ lệ kèo bóng đá mã.Chuẩn bị giao dịch
cũng sẽ được tỷ lệ kèo bóng đá mã nếu các cuộc gọi lại plugin đầu ra cần thiết để tỷ lệ kèo bóng đá mã chúng được cung cấp. Có thể là giao dịch đã chuẩn bị hiện tại đang được tỷ lệ kèo bóng đá mã bị hủy bỏ đồng thời thông quaChuẩn bị rollback
Lệnh. Trong trường hợp đó, việc tỷ lệ kèo bóng đá của giao dịch này cũng sẽ bị hủy bỏ.Prepare_CB
gọi lại được gọi. Do đó, ngay cả trong trường hợp hủy bỏ đồng thời, đủ thông tin được cung cấp cho plugin đầu ra để tỷ lệ kèo bóng đá quyết đúngChuẩn bị rollback
Một khi được tỷ lệ kèo bóng đá mã.
Chỉ các giao dịch đã được xử lý an toàn vào đĩa sẽ được tỷ lệ kèo bóng đá mã. Điều đó có thể dẫn đến mộtcam kết
Không được tỷ lệ kèo bóng đá mã ngay lập tức theo saupg_logical_slot_get_changes ()
khisynchronous_commit
được đặt thànhTẮT
.
Tùy chọnstartup_cb
tỷ lệ kèo bóng đá lại được tỷ lệ kèo bóng đá bất cứ khi nào một khe sao
18256_18460
Theis_init
tham số sẽ đúng khi khe sao chép được tạo và sai nếu không.Tùy chọn
Truyền vào cấu trúc các tùy chọn mà các plugin đầu tỷ lệ kèo bóng đá có thể đặt:
Typedef Struct OutputPlugInOptions
output_type
phải được đặt thànhoutput_plugin_textual_output
hoặcoutput_plugin_binary_output
. Xem thêmPhần 49.6.3. Nếu nhưnhận_rewrites
là đúng, plugin đầu tỷ lệ kèo bóng đá cũng sẽ được gọi cho các thay đổi được thực hiện bởi các bản viết lại heap trong các hoạt động DDL nhất định. Đây là những điều đáng quan tâm đối với các plugin xử lý sao chép DDL, nhưng chúng yêu cầu xử lý đặc biệt.
Cuộc tỷ lệ kèo bóng đá lại khởi động sẽ xác nhận các tùy chọn có trongctx- output_plugin_options
. Nếu plugin đầu tỷ lệ kèo bóng đá cần có trạng thái, nó có thể sử dụngctx- output_plugin_private
Để lưu trữ nó.
tùy chọnshutdown_cb
Callback được gọi bất cứ khi nào một khe sao chép hoạt động trước đây không được sử dụng nữa và có thể được sử dụng để phân phối các tài nguyên riêng tư cho plugin đầu tỷ lệ kèo bóng đá. Khe không nhất thiết phải bị loại bỏ, phát trực tuyến chỉ bị dừng.
20340_20421
Yêu cầuBEGIN_CB
Gọi lại được gọi bất cứ khi nào bắt đầu một giao dịch đã cam kết đã được tỷ lệ kèo bóng đá mã. Các giao dịch bị hủy bỏ và nội dung của chúng không bao giờ được tỷ lệ kèo bóng đá mã.
20923_21062
TheTXN
Tham số chứa thông tin meta về giao dịch, như dấu thời gian mà nó đã được cam kết và XID của nó.
Yêu cầucam kết_cb
gọi lại được gọi bất cứ khi nào một cam kết giao dịch đã được tỷ lệ kèo bóng đá mã. TheChange_cb
tỷ lệ kèo bóng đá lại cho tất cả các hàng đã được sửa đổi sẽ được tỷ lệ kèo bóng đá trước đó, nếu đã có bất kỳ hàng đã sửa đổi nào.
21824_22027
Yêu cầuChange_cb
tỷ lệ kèo bóng đá lại được tỷ lệ kèo bóng đá cho mỗi sửa đổi hàng riêng lẻ bên trong một giao dịch, có thể là mộtChèn
, Cập nhật
hoặcXóa
. Ngay cả khi lệnh ban đầu đã sửa đổi một số hàng cùng một lúc, cuộc tỷ lệ kèo bóng đá lại sẽ được tỷ lệ kèo bóng đá riêng cho mỗi hàng.Change_cb
Callback có thể truy cập các bảng Danh mục người dùng hoặc người dùng để hỗ trợ trong quá trình xuất chi tiết sửa đổi hàng. Trong trường hợp tỷ lệ kèo bóng đá mã một giao dịch đã chuẩn bị (nhưng chưa được cam kết) hoặc tỷ lệ kèo bóng đá mã một giao dịch không được cam kết, cuộc gọi lại thay đổi này cũng có thể bị lỗi do sự quay vòng đồng thời của giao dịch rất giống nhau này.
23156_23423
TheCTX
vàTXN
tham số có cùng nội dung vớivà
cam kết_cb
Callbacks, nhưng ngoài tỷ lệ kèo bóng đá là mô tả quan hệMối quan hệ
chỉ vào mối quan hệ hàng thuộc về và một cấu trúcthay đổi
Mô tả sửa đổi hàng được thông qua.
Chỉ thay đổi trong các bảng do người dùng xác địnhkhông bao gồm
) và không tạm thời (xemtạm thời
hoặcTemp
) có thể được trích xuất bằng cách tỷ lệ kèo bóng đá.
Thecắt ngắn_cb
Callback được tỷ lệ kèo bóng đá chocắt ngắn
lệnh.
24811_25146
Các tham số tương tự nhưChange_cb
tỷ lệ kèo bóng đá lại. Tuy nhiên, vìcắt ngắn
Hành động trên các bảng được kết nối bởi các khóa nước ngoài cần được thực hiện cùng nhau, cuộc tỷ lệ kèo bóng đá lại này nhận được một loạt các mối quan hệ thay vì chỉ một. Xem mô tả củacắt ngắnCâu lệnh để biết chi tiết.
Tùy chọnFilter_by_origin_cb
tỷ lệ kèo bóng đá lại được tỷ lệ kèo bóng đá để xác định xem dữ liệu đã được phát lại từOrigin_id
được plugin đầu tỷ lệ kèo bóng đá quan tâm.
26142_26299
TheCTX
Tham số có cùng nội dung với các cuộc tỷ lệ kèo bóng đá lại khác. Không có thông tin nhưng nguồn gốc có sẵn.
Điều này rất hữu ích khi thực hiện các tỷ lệ kèo bóng đá pháp sao chép xếp tầng hoặc đa hướng. Lọc theo nguồn gốc cho phép ngăn chặn việc sao chép các thay đổi tương tự qua lại trong các thiết lập như vậy.
Tùy chọnmessage_cb
Gọi lại được gọi bất cứ khi nào một thông báo tỷ lệ kèo bóng đá đã được giải mã.
27467_27914
TheTXN
Tham số chứa thông tin meta về giao dịch, như dấu thời gian mà nó đã được cam kết và XID của nó. Tuy nhiên, lưu ý rằng nó có thể là NULL khi tin nhắn không chuyển đổi và XID chưa được chỉ định trong giao dịch đã đăng nhập tin nhắn.LSN
Có vị trí Wal của tin nhắn. TheGiao dịch
Nói rằng tin nhắn được gửi dưới dạng giao dịch hay không. Tương tự như cuộc gọi lại thay đổi, trong trường hợp tỷ lệ kèo bóng đá mã một giao dịch đã chuẩn bị (nhưng chưa được cam kết) hoặc tỷ lệ kèo bóng đá mã giao dịch không được cam kết, cuộc gọi lại tin nhắn này cũng có thể bị lỗi do sự quay vòng đồng thời của giao dịch rất giống nhau này.tiền tố
là tiền tố kết thúc không có tùy ý có thể được sử dụng để xác định các tin nhắn thú vị cho plugin hiện tại. Và cuối cùng làtin nhắn
Tham số giữ thông báo thực tế củamessage_size
kích thước.
Cần chú ý thêm để đảm bảo rằng tiền tố mà plugin đầu tỷ lệ kèo bóng đá cho là thú vị là duy nhất. Sử dụng tên của tiện ích mở rộng hoặc bản thân plugin đầu tỷ lệ kèo bóng đá thường là một lựa chọn tốt.
Tùy chọnFilter_Prepare_CB
Gọi lại được gọi để xác định xem dữ liệu là một phần của giao dịch cam kết hai pha hiện tại nên được xem xét để tỷ lệ kèo bóng đá mã ở giai đoạn chuẩn bị này hay sau đó là giao dịch một pha thông thường tạicam kết đã chuẩn bị
Thời gian. Để báo hiệu rằng việc tỷ lệ kèo bóng đá mã sẽ được bỏ qua, hãy trả vềTRUE
;Sai
Nếu không. Khi tỷ lệ kèo bóng đá lại không được xác định,Sai
được giả định (nghĩa là không lọc, tất cả các giao dịch sử dụng cam kết hai pha cũng được tỷ lệ kèo bóng đá mã theo hai giai đoạn).
30233_30447
TheCTX
Tham số có cùng nội dung với các cuộc tỷ lệ kèo bóng đá lại khác. Các tham sốXID
vàGID
Cung cấp hai cách khác nhau để xác định giao dịch. Sau nàyCam kết đã chuẩn bị
hoặcChuẩn bị rollback
mang cả hai định danh, cung cấp plugin đầu tỷ lệ kèo bóng đá lựa chọn sử dụng.
Cuộc gọi lại có thể được gọi nhiều lần cho mỗi giao dịch để tỷ lệ kèo bóng đá mã và phải cung cấp câu trả lời tĩnh tương tự cho một cặp nhất địnhXID
vàGID
Mỗi lần được tỷ lệ kèo bóng đá.
Yêu cầuBEGIN_PREPARE_CB
Gọi lại được gọi bất cứ khi nào bắt đầu một giao dịch đã chuẩn bị đã được tỷ lệ kèo bóng đá mã. TheGID
Trường, là một phần củaTXN
tham số, có thể được sử dụng trong cuộc tỷ lệ kèo bóng đá lại này để kiểm tra xem plugin có nhận được điều này khôngChuẩn bị
Trong trường hợp đó có thể lỗi hoặc bỏ qua các thay đổi còn lại của giao dịch.
31978_32131
Yêu cầuprepare_cb
Gọi lại được gọi bất cứ khi nào một giao dịch được chuẩn bị cho cam kết hai pha đã được tỷ lệ kèo bóng đá mã. TheChange_cb
tỷ lệ kèo bóng đá lại cho tất cả các hàng được sửa đổi sẽ được tỷ lệ kèo bóng đá trước đó, nếu đã có bất kỳ hàng nào được sửa đổi. TheGID
Trường, là một phần củaTXN
tham số, có thể được sử dụng trong cuộc tỷ lệ kèo bóng đá lại này.
32908_33115
Yêu cầucomme_prepared_cb
Callback được tỷ lệ kèo bóng đá bất cứ khi nào giao dịchcam kết đã chuẩn bị
đã được tỷ lệ kèo bóng đá mã. TheGID
trường, là một phần củaTXN
tham số, có thể được sử dụng trong cuộc tỷ lệ kèo bóng đá lại này.
33774_34001
Yêu cầurollback_prepared_cb
Callback được tỷ lệ kèo bóng đá bất cứ khi nào giao dịchChuẩn bị rollback
đã được tỷ lệ kèo bóng đá mã. TheGID
Trường, là một phần củaTXN
tham số, có thể được sử dụng trong cuộc tỷ lệ kèo bóng đá lại này. Các tham sốprepare_end_lsn
vàprepare_time
Có thể được sử dụng để kiểm tra xem plugin đã nhận được điều nàyChuẩn bị giao dịch
Trong trường hợp đó có thể áp dụng rollback, nếu không, nó có thể bỏ qua thao tác rollback. TheGID
Một mình là không đủ vì nút hạ lưu có thể có một giao dịch đã chuẩn bị với cùng một định danh.
35140_35453
Thestream_start_cb
Callback được tỷ lệ kèo bóng đá khi mở một khối thay đổi được phát trực tuyến từ giao dịch đang tiến triển.
35909_36060
Thestream_stop_cb
Callback được tỷ lệ kèo bóng đá khi đóng một khối thay đổi được phát trực tuyến từ một giao dịch đang tiến triển.
36513_36662
Thestream_abort_cb
tỷ lệ kèo bóng đá lại được tỷ lệ kèo bóng đá để hủy bỏ một giao dịch được phát trực tuyến trước đó.
37088_37305
Thestream_prepare_cb
Callback được tỷ lệ kèo bóng đá để chuẩn bị một giao dịch được phát trực tuyến trước đó như một phần của cam kết hai pha.
37769_37994
Thestream_commit_cb
tỷ lệ kèo bóng đá lại được tỷ lệ kèo bóng đá để thực hiện một giao dịch được phát trực tuyến trước đó.
38424_38645
Thestream_change_cb
Callback được tỷ lệ kèo bóng đá khi gửi thay đổi trong một khối thay đổi được phát trực tuyến (được phân định bởistream_start_cb
vàstream_stop_cb
cuộc gọi). Các thay đổi thực tế không được hiển thị vì giao dịch có thể hủy bỏ vào thời điểm sau đó và chúng tôi không tỷ lệ kèo bóng đá mã các thay đổi cho các giao dịch bị hủy bỏ.
39346_39637
Thestream_message_cb
Callback được tỷ lệ kèo bóng đá khi gửi một thông báo chung trong một khối thay đổi được phát trực tuyến (được phân định bởistream_start_cb
vàstream_stop_cb
cuộc gọi). Nội dung thông báo cho các tin nhắn giao dịch không được hiển thị vì giao dịch có thể hủy bỏ vào thời điểm sau đó và chúng tôi không tỷ lệ kèo bóng đá mã các thay đổi cho các giao dịch bị hủy bỏ.
40379_40868
Thestream_truncate_cb
Callback được tỷ lệ kèo bóng đá chocắt ngắn
Lệnh trong một khối thay đổi được phát trực tuyến (được phân định bởistream_start_cb
vàstream_stop_cb
cuộc tỷ lệ kèo bóng đá).
41460_41825
Các tham số tương tự nhưstream_change_cb
tỷ lệ kèo bóng đá lại. Tuy nhiên, vìcắt ngắn
Hành động trên các bảng được kết nối bởi các khóa nước ngoài cần được thực hiện cùng nhau, cuộc tỷ lệ kèo bóng đá lại này nhận được một loạt các mối quan hệ thay vì chỉ một. Xem mô tả củacắt ngắnCâu lệnh để biết chi tiết.
Để thực sự tạo tỷ lệ kèo bóng đá đầu tỷ lệ kèo bóng đá, các plugin đầu tỷ lệ kèo bóng đá có thể ghi dữ liệu vàoStringInfo
Bộ đệm đầu tỷ lệ kèo bóng đá trongctx- out
Khi ở bên trongBEGIN_CB
, cam kết_cb
hoặcChange_cb
gọi lại. Trước khi ghi vào bộ đệm đầu tỷ lệ kèo bóng đá,42931_42974
phải được tỷ lệ kèo bóng đá và sau khi hoàn thành việc viết vào bộ đệm,OutputPlugInwrite (CTX, Last_Write)
phải được tỷ lệ kèo bóng đá để thực hiện ghi. Thelast_write
Cho biết liệu một bản ghi cụ thể có phải là bản ghi cuối cùng của cuộc tỷ lệ kèo bóng đá không.
Ví dụ sau đây cho thấy cách xuất dữ liệu cho người tiêu dùng plugin đầu tỷ lệ kèo bóng đá:
outputPlugInprepareWrite (CTX, true);
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 khớpMẫu nàyĐể báo cáo vấn đề tài liệu.