Phiên bản được hỗ trợ:hiện tại(17)16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4

49.6. Plugin đầu ra tỷ lệ kèo bóng đá

Một plugin đầu tỷ lệ kèo bóng đá ví dụ có thể được tìm thấy trongPREDT/TEST_DECODINGSubdirectory của cây nguồn PostgreSQL.

49.6.1. Chức năng khởi tạo

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_cbcam kết_cbtỷ lệ kèo bóng đá lại là bắt buộc, trong khistartup_cb, filter_by_origin_cb, cắt ngắn_cbshutdown_cblà tùy chọn. Nếu nhưcắt ngắn_cbkhông được đặt mà làcắt ngắnsẽ đượ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_cbstream_prepare_cbđược yêu cầu, trong khistream_message_cbstream_truncate_cblà 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_cbrollback_prepared_cbtỷ lệ kèo bóng đá lại là bắt buộc, trong khiFilter_Prepare_CBlà tùy chọn.

49.6.2. Khả năng

Để 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ởiinitDBTrongpg_catalogSchema 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 ().

49.6.3. Chế độ đầu tỷ lệ kèo bóng đá

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_outputthay vìoutput_plugin_binary_outputtrongtỷ 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ủ để ATextDatum 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.

49.6.4. Gọi cho plugin đầu tỷ lệ kèo bóng đá

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 đầucam kếtgọ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ịchcũ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ị rollbackLệ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_CBgọ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ị rollbackMột khi được tỷ lệ kèo bóng đá mã.

Lưu ý

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ếtKhô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.

49.6.4.1. Khởi động tỷ lệ kèo bóng đá lại

Tùy chọnstartup_cbtỷ 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_inittham số sẽ đúng khi khe sao chép được tạo và sai nếu không.Tùy chọnTruyề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_typephải được đặt thànhoutput_plugin_textual_outputhoặcoutput_plugin_binary_output. Xem thêmPhần 49.6.3. Nếu nhưnhận_rewriteslà đú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ó.

49.6.4.2. Tắt máy tỷ lệ kèo bóng đá lại

tùy chọnshutdown_cbCallback đượ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

49.6.4.3. Giao dịch bắt đầu tỷ lệ kèo bóng đá lại

Yêu cầuBEGIN_CBGọ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

TheTXNTham 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ó.

49.6.4.4. tỷ lệ kèo bóng đá lại kết thúc giao dịch

Yêu cầucam kết_cbgọ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_cbtỷ 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

49.6.4.5. Thay đổi tỷ lệ kèo bóng đá lại

Yêu cầuChange_cbtỷ 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ậthoặ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_cbCallback 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

TheCTXTXNtham số có cùng nội dung vớicam kết_cbCallbacks, 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 đổiMô tả sửa đổi hàng được thông qua.

Lưu ý

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ờihoặcTemp) có thể được trích xuất bằng cách tỷ lệ kèo bóng đá.

49.6.4.6. Cắt tỷ lệ kèo bóng đá lại

Thecắt ngắn_cbCallback được tỷ lệ kèo bóng đá chocắt ngắnlệnh.

24811_25146

Các tham số tương tự nhưChange_cbtỷ lệ kèo bóng đá lại. Tuy nhiên, vìcắt ngắnHà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.

49.6.4.7. Trai tỷ lệ kèo bóng đá bộ lọc gốc

Tùy chọnFilter_by_origin_cbtỷ 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

TheCTXTham 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.

49.6.4.8. tỷ lệ kèo bóng đá lại thông báo chung

Tùy chọnmessage_cbGọ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

TheTXNTham 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.LSNCó vị trí Wal của tin nhắn. TheGiao dịchNó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ắnTham số giữ thông báo thực tế củamessage_sizekí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.

49.6.4.9. Chuẩn bị tỷ lệ kèo bóng đá lại bộ lọc

Tùy chọnFilter_Prepare_CBGọ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;SaiNế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

TheCTXTham 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ốXIDGIDCung 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ị rollbackmang 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 địnhXIDGIDMỗi lần được tỷ lệ kèo bóng đá.

49.6.4.10. Giao dịch bắt đầu chuẩn bị tỷ lệ kèo bóng đá lại

Yêu cầuBEGIN_PREPARE_CBGọ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ã. TheGIDTrường, là một phần củaTXNtham 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

49.6.4.11. Giao dịch chuẩn bị tỷ lệ kèo bóng đá lại

Yêu cầuprepare_cbGọ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_cbtỷ 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. TheGIDTrường, là một phần củaTXNtham số, có thể được sử dụng trong cuộc tỷ lệ kèo bóng đá lại này.

32908_33115

49.6.4.12. Giao dịch cam kết được chuẩn bị tỷ lệ kèo bóng đá lại

Yêu cầucomme_prepared_cbCallback đượ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ã. TheGIDtrường, là một phần củaTXNtham số, có thể được sử dụng trong cuộc tỷ lệ kèo bóng đá lại này.

33774_34001

49.6.4.13. Giao dịch rollback đã chuẩn bị tỷ lệ kèo bóng đá lại

Yêu cầurollback_prepared_cbCallback đượ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ã. TheGIDTrường, là một phần củaTXNtham 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_lsnprepare_timeCó thể được sử dụng để kiểm tra xem plugin đã nhận được điều nàyChuẩn bị giao dịchTrong trường hợp đó có thể áp dụng rollback, nếu không, nó có thể bỏ qua thao tác rollback. TheGIDMộ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

49.6.4.14. Stream bắt đầu tỷ lệ kèo bóng đá lại

Thestream_start_cbCallback đượ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

49.6.4.15. Stream dừng tỷ lệ kèo bóng đá lại

Thestream_stop_cbCallback đượ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

49.6.4.16. Phát trực tiếp cuộc tỷ lệ kèo bóng đá lại

Thestream_abort_cbtỷ 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

49.6.4.17. Stream Prepare Callback

Thestream_prepare_cbCallback đượ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

49.6.4.18. Stream cam kết tỷ lệ kèo bóng đá lại

Thestream_commit_cbtỷ 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

49.6.4.19. Thay đổi luồng tỷ lệ kèo bóng đá lại

Thestream_change_cbCallback đượ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_cbstream_stop_cbcuộ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

49.6.4.20. Trò tỷ lệ kèo bóng đá lại thông báo phát trực tuyến

Thestream_message_cbCallback đượ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_cbstream_stop_cbcuộ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

49.6.4.21. Stream cắt tỷ lệ kèo bóng đá lại

Thestream_truncate_cbCallback được tỷ lệ kèo bóng đá chocắt ngắnLệnh trong một khối thay đổi được phát trực tuyến (được phân định bởistream_start_cbstream_stop_cbcuộc tỷ lệ kèo bóng đá).

41460_41825

Các tham số tương tự nhưstream_change_cbtỷ lệ kèo bóng đá lại. Tuy nhiên, vìcắt ngắnHà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.

49.6.5. Các chức năng để tạo tỷ lệ kèo bóng đá đầu tỷ lệ kèo bóng đá

Để 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àoStringInfoBộ đệm đầu tỷ lệ kèo bóng đá trongctx- outKhi ở bên trongBEGIN_CB, cam kết_cbhoặcChange_cbgọi lại. Trước khi ghi vào bộ đệm đầu tỷ lệ kèo bóng đá,42931_42974phả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_writeCho 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);

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 khớpMẫu nàyĐể báo cáo vấn đề tài liệu.