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 / 9.3 / 9.2 / 9.1
Tài liệu này dành cho phiên bản không được hỗ trợ kèo bóng đá euro PostgreSQL.
Bạn có thể muốn xem cùng một trang kèo bóng đá eurohiện tạiPhiên bản hoặc một trong kèo bóng đá euro phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

52.2. Các thói quen gọi lại của kèo bóng đá euro dữ liệu

Hàm người xử lý FDW trả về palloc'dFDWROUTINEcấu trúc chứa kèo bóng đá euro con trỏ vào kèo bóng đá euro chức năng gọi lại được mô tả dưới đây. kèo bóng đá euro chức năng liên quan đến quét là Yêu cầu, phần còn lại là tùy chọn.

TheFDWROUTINELoại cấu trúc là được khai báo trongsrc/bao gồm/kèo bóng đá euro/fdwapi.h, xem để biết thêm chi tiết.

52.2.1. Các thói quen của FDW để quét kèo bóng đá euro Bảng

Void
GetforeignRelsize (Root PlannerInfo *,
                   Reloptinfo *baserel,
                   Oid foreigntableid);

Lấy ước tính kích thước quan hệ cho một bảng kèo bóng đá euro. Đây là được gọi là bắt đầu lập kế hoạch cho một truy vấn quét một Bàn kèo bóng đá euro.rootlà người lập kế hoạch Thông tin toàn cầu về truy vấn;Baserellà thông tin kèo bóng đá euro người lập kế hoạch về điều này bàn; VàForeignTableIDpg_ classOID của Bàn kèo bóng đá euro. (ForeignTableIDcó thể được lấy từ cấu trúc dữ kèo bóng đá euro kế hoạch, nhưng nó được thông qua rõ ràng để lưu cố gắng.)

Hàm này sẽ cập nhậtbaserel- hànglà số lượng hàng dự kiến được trả về bằng cách quét bảng, sau khi tính toán cho việc lọc bởi kèo bóng đá euro câu hỏi hạn chế. Giá trị ban đầu củabaserel- hàngchỉ là một mặc định không đổi Ước tính, nên được thay thế nếu có thể. Chức năng Cũng có thể chọn cập nhậtBaserel- WidthNếu nó có thể tính toán tốt hơn Ước tính chiều rộng hàng kết quả trung bình.

xemPhần 52.4Để bổ sung thông tin.

Void
Getforeignpaths (Root PlannerInfo *,
                 Reloptinfo *baserel,
                 Oid foreigntableid);

Tạo các đường dẫn truy cập có thể để quét trên bàn kèo bóng đá euro. Cái này được gọi trong quá trình lập kế hoạch truy vấn. Các tham số giống như đối vớigetforeignrelsize, đã được gọi.

Hàm này phải tạo ít nhất một đường dẫn truy cập (ForeignPathnút) để quét trên bàn kèo bóng đá euro và phải gọiadd_pathĐể thêm mỗi Đường dẫn như vậy đếnbaserel- pathlist. kèo bóng đá euro nó được đề nghị sử dụngcreated_forignscan_pathđể xây dựngForeignPathnút. Chức năng có thể tạo Nhiều đường dẫn truy cập, ví dụ: một đường dẫn có hợp lệPathkeysĐể thể hiện kết quả được sắp xếp trước. Mỗi Đường dẫn truy cập phải chứa kèo bóng đá euro ước tính chi phí và có thể chứa bất kỳ Thông tin FDW-Private cần thiết để xác định cụ thể Phương thức quét dự định.

xemPhần 52.4Để bổ sung thông tin.

kèo bóng đá euro *
Getforeignplan (Root PlannerInfo *,
                Reloptinfo *baserel,
                Oid foreigntableid,
                ForeignPath *best_path,
                Danh sách *Tlist,
                Danh sách *scan_clauses);

Tạo AForeignScanKế hoạch nút từ Đường dẫn truy cập kèo bóng đá euro được chọn. Điều này được gọi vào cuối Kế hoạch truy vấn. Các tham số là nhưgetforeignrelsize, cộng với đã chọnForeignPath(trước đây được sản xuất bởiGetForignPaths), Danh sách mục tiêu được phát ra bởi nút kế hoạch và kèo bóng đá euro điều khoản hạn chế được thực thi bởi Kế hoạch nút.

Chức năng này phải tạo và trả về AForeignScanKế hoạch nút; nó được khuyến nghị sử dụng13196_13214Để xây dựngForeignScanNode.

xemPhần 52.4Để bổ sung thông tin.

VOID
BeginForignScan (Nút kèo bóng đá euro *Node,
                  int eflags);

Bắt đầu thực hiện quét kèo bóng đá euro. Điều này được gọi trong quá trình thực thi Khởi nghiệp. Nó sẽ thực hiện bất kỳ khởi tạo nào cần thiết trước quét có thể bắt đầu, nhưng không bắt đầu thực hiện quét thực tế (đó nên được thực hiện trong cuộc gọi đầu tiên đến13733_13753). TheForeignScanstateNode đã được tạo, Nhưng nóFDW_STATE13888_13974ForeignScanstateNode (đặc biệt, từ cơ bảnForeignScankế hoạch Nút, chứa bất kỳ thông tin FDW-Private nào được cung cấp bởiGetforeignplan14208_14213EFLAGSChứa kèo bóng đá euro bit cờ mô tả Chế độ hoạt động cho nút gói này.

Lưu ý rằng khi(EFLAGS & Exec_flag_explain_only)là sự thật, chức năng này không nên thực hiện bất kỳ hành động nhìn bên ngoài nào; nó chỉ nên làm Tối thiểu cần thiết để làm kèo bóng đá euro trạng thái nút hợp lệ kèo bóng đá euroGiải thích FormentIgnScanendforeignscan.

tupletableslot *
IraterforforignScan (Nút ForeignScanState *);

Lấy một hàng từ nguồn kèo bóng đá euro, trả lại nó trong một tuple slot bảng (nút củascantuplotlotnên được sử dụng cho mục đích này). Trả lại null nếu không còn hàng nữa có sẵn. Cơ sở hạ tầng khe cắm bảng Tuple cho phép Tuple vật lý hoặc ảo được trả lại; Trong hầu hết kèo bóng đá euro trường hợp sau này Lựa chọn là thích hợp hơn từ quan điểm hiệu suất. Lưu ý rằng điều này được gọi trong bối cảnh bộ nhớ tồn tại ngắn sẽ được đặt lại giữa những lời mời. Tạo ngữ cảnh bộ nhớ trongBeginForignScanNếu bạn cần tồn tại lâu hơn lưu trữ hoặc sử dụngES_Query_CXTkèo bóng đá euro nút kèo bóng đá euroEstate.

Các hàng được trả về phải khớp với chữ ký cột của kèo bóng đá euro bảng được quét. Nếu bạn chọn tối ưu hóa việc tìm nạp các cột không cần thiết, bạn nên chèn null vào đó vị trí cột.

Lưu ý rằngPostgreSQL15718_15783không nullCác ràng buộc được xác định trên Các cột bàn kèo bóng đá euro - nhưng người lập kế hoạch quan tâm và có thể tối ưu hóa truy vấn không chính xác nếunullGiá trị là hiện diện trong một cột được tuyên bố không chứa chúng. Nếu anullGiá trị gặp phải khi người dùng đã khai báo rằng không nên có mặt, nó có thể phù hợp để nâng cao Lỗi (giống như bạn cần phải làm trong trường hợp loại dữ kèo bóng đá euro không phù hợp).

16288_16338

Khởi động lại lần quét từ đầu. Lưu ý rằng bất kỳ tham số nào Việc quét phụ thuộc vào có thể đã thay đổi giá trị, vì vậy việc quét mới không nhất thiết phải trả về chính xác cùng một hàng.

VOID
FEDFOREIGNSCAN (NODE *NODE);

Kết thúc tài nguyên quét và phát hành. Nó thường không quan trọng để phát hành bộ nhớ palloc'd, nhưng ví dụ kết nối với máy chủ từ xa nên được làm sạch.

52.2.2. Các thói quen FDW để cập nhật kèo bóng đá euro Bảng

16950_17113

VOID
AddforeignupDateTargets (truy vấn *parsetree,
                         RangetBlentry *target_rte,
                         Quan hệ Target_Relation);

Cập nhậtXóa17373_17679"Junk", các cột đích đến Danh sách các cột sẽ được lấy từ bàn kèo bóng đá euro Trong mộtCập nhậthoặcXóa.

Để làm điều đó, thêmTargetEntryMục tớiParsetree- TargetList17998_1809218114_18123=TRUE, và phải có một sự khác biệtResNamesẽ xác định nó vào thời điểm thực hiện. Tránh sử dụng tên khớpCTIDnhoặcWholerown, như Hệ thống lõi có thể tạo kèo bóng đá euro cột rác của kèo bóng đá euro tên này.

Hàm này được gọi trong trình viết lại, không phải người lập kế hoạch, vì vậy thông tin có sẵn là một chút khác với thông tin có sẵn cho kèo bóng đá euro thói quen lập kế hoạch.Parsetreelà phân tích cây kèo bóng đá euroCập nhậthoặcXóaLệnh, trong khitarget_rteTarget_RelationMô tả mục tiêu kèo bóng đá euro bàn.

NếuCon trỏ được đặt thànhnull, không có mục tiêu bổ sung nào Biểu thức được thêm vào. (Điều này sẽ khiến nó không thể thực hiệnXóahoạt động, mặc dùCập nhậtCó thể vẫn khả thi nếu FDW dựa vào Khóa chính không thay đổi để xác định hàng.)

Danh sách *
PlanforeignModify (Root PlannerInfo *,
                   ModifyTable *kế hoạch,
                   Chỉ số kết nối,
                   int subplan_index);

Thực hiện bất kỳ hành động lập kế hoạch bổ sung nào cần thiết để chèn, Cập nhật, hoặc xóa trên bàn kèo bóng đá euro. Chức năng này tạo ra Thông tin FDW-Private sẽ được đính kèm vớiModifyTableKế hoạch nút thực hiện cập nhật hoạt động. Thông tin cá nhân này phải có dạng ADanh sáchvà sẽ được chuyển đếnBeginForignModifyTrong quá trình thực hiện sân khấu.

rootlà toàn cầu kèo bóng đá euro kế hoạch thông tin về truy vấn.kế hoạchModifyTableKế hoạch nút, đó là Hoàn thành ngoại trừFDWPRIVLISStrường.ResultrelationXác định Mục tiêu Bàn kèo bóng đá euro theo chỉ số có thể thay đổi của nó.Subplan_indexXác định mục tiêu nào kèo bóng đá euroModifyTableKế hoạch nút này, đếm từ 0; Sử dụng cái này nếu bạn muốn lập chỉ mục vàoKế hoạch- Kế hoạchhoặc cấu trúc phụ khác kèo bóng đá eurokế hoạchNode.

xemPhần 52.4Để bổ sung thông tin.

NếuplanforeignmodifyCon trỏ được đặt thànhnull, Không có thời gian kế hoạch bổ sung hành động được thực hiện vàFDW_PrivateDanh sách được giao kèo bóng đá euroBeginForignModifysẽ là nil.

20981_21187

Bắt đầu thực hiện hoạt động sửa đổi bàn kèo bóng đá euro. Cái này Thường xuyên được gọi trong quá trình khởi động thực thi. Nó sẽ thực hiện bất kỳ Khởi tạo cần thiết trước khi sửa đổi bảng thực tế. Sau đó,EXECFORIGNINSERT, ExecforeIgnupDatehoặcExecforeIgnDeletesẽ được gọi kèo bóng đá euro mỗi tuple Để được chèn, cập nhật hoặc xóa.

MTSTATElà trạng thái tổng thể kèo bóng đá euroModifyTableKế hoạch nút được thực thi; Dữ kèo bóng đá euro toàn cầu về kế hoạch và trạng thái thực thi có sẵn thông qua Cấu trúc này.rinforesultrelInfoCấu trúc mô tả mục tiêu Bàn kèo bóng đá euro. (TheRI_FDWSTATETrường kèo bóng đá euroresultrelInfocó sẵn kèo bóng đá euro FDW để lưu trữ bất kỳ trạng thái riêng tư nào mà nó cần kèo bóng đá euro hoạt động này.)FDW_PrivateChứa dữ kèo bóng đá euro riêng tư được tạo bởiplanforignmodify, nếu bất kì.Subplan_indexXác định mục tiêu nào kèo bóng đá euroModifyTableKế hoạch nút này.EFLAGSChứa kèo bóng đá euro bit cờ mô tả Chế độ hoạt động của người thực thi cho nút gói này.

Lưu ý rằng khi(EFLAGS & Exec_flag_explain_only)là sự thật, chức năng này không nên thực hiện bất kỳ hành động nhìn bên ngoài nào; nó chỉ nên làm Tối thiểu cần thiết để làm kèo bóng đá euro trạng thái nút hợp lệ kèo bóng đá euroGiải thích trước khi điều chỉnhendforeignmodify.

NếuBeginForignModifyCon trỏ được đặt thànhnull, không có hành động nào được thực hiện trong thời gian Khởi động thực thi.

tupletableslot *
EXECFOREIGNINSERT (bất động sản *bất động sản,
                   Resultrelinfo *rinfo,
                   TuppletablesLot *slot,
                   Tupletableslot *planlot);

Chèn một tuple vào Bàn kèo bóng đá euro.Estatelà trạng thái thực thi toàn cầu kèo bóng đá euro truy vấn.rinforesultrelInfoCấu trúc mô tả mục tiêu Bàn kèo bóng đá euro.slotChứa Tuple to to được chèn; nó sẽ phù hợp với định nghĩa RowType của kèo bóng đá euro bàn.SP rapchứa bộ tuple mà được tạo bởiModifyTableKế hoạch SUBS SUBS kèo bóng đá euro nút; nó khác vớislotin có thể chứa bổ sung"Junk"Cột. (TheSP rapthường là kèo bóng đá euro ít quan tâm choChèntrường hợp, nhưng là được cung cấp kèo bóng đá euro sự hoàn chỉnh.)

Giá trị trả về là một khe chứa dữ liệu thực sự được chèn (điều này có thể khác với dữ liệu được cung cấp, cho ví dụ như là kết quả của kèo bóng đá euro hành động kích hoạt) hoặc null nếu không có hàng thực sự được chèn (một lần nữa, thường là kết quả của kèo bóng đá euro kích hoạt). kèo bóng đá euro đã quaslotcó thể được sử dụng lại kèo bóng đá euro điều này mục đích.

Dữ kèo bóng đá euro trong khe được trả về chỉ được sử dụng nếuChènTruy vấn cóTrở vềmệnh đề. Do đó, FDW có thể chọn tối ưu hóa việc trả lại một số hoặc tất cả kèo bóng đá euro cột tùy thuộc vào nội dung củaTrở vềmệnh đề. Tuy nhiên, một số khe phải được trả lại để kèo bóng đá euro biết thành công hoặc truy vấn Số lượng hàng được báo cáo sẽ sai.

NếuEXECFORIGNINSERTCon trỏ được đặt thànhnull, cố gắng chèn vào Bàn kèo bóng đá euro sẽ thất bại với một thông báo lỗi.

tupletableslot *
EXECFEFFEFFEMENTUPDATE (bất động sản *bất động sản,
                   Resultrelinfo *rinfo,
                   TuppletablesLot *slot,
                   Tupletableslot *planlot);

Cập nhật một tuple trong Bàn kèo bóng đá euro.Estatelà trạng thái thực thi toàn cầu kèo bóng đá euro truy vấn.rinforesultrelInfoCấu trúc mô tả mục tiêu Bàn kèo bóng đá euro.slotChứa dữ liệu mới cho tuple; nó sẽ phù hợp với định nghĩa RowType của kèo bóng đá euro bàn.SP rapchứa bộ tuple mà được tạo bởiModifyTableKế hoạch SUBS SUBS kèo bóng đá euro nút; nó khác vớislotin có thể chứa bổ sung"Junk"Cột. Cụ thể, bất kỳ cột rác nào được yêu cầu bởisẽ Có sẵn từ khe này.

Giá trị trả về là một khe chứa hàng thực sự được cập nhật (điều này có thể khác với dữ liệu được cung cấp, cho ví dụ như là kết quả của kèo bóng đá euro hành động kích hoạt) hoặc null nếu không có hàng Trên thực tế được cập nhật (một lần nữa, thường là kết quả của kèo bóng đá euro kích hoạt). kèo bóng đá euro đã quaslotcó thể được sử dụng lại kèo bóng đá euro điều này mục đích.

Dữ kèo bóng đá euro trong khe được trả về chỉ được sử dụng nếuCập nhậtTruy vấn cóTrở vềmệnh đề. Do đó, FDW có thể chọn tối ưu hóa việc trả lại một số hoặc tất cả kèo bóng đá euro cột tùy thuộc vào nội dung củaTrở vềmệnh đề. Tuy nhiên, một số khe phải được trả lại để kèo bóng đá euro biết thành công hoặc truy vấn Số lượng hàng được báo cáo sẽ sai.

Nếu26687_26706Con trỏ được đặt thànhnull, cố gắng cập nhật Bàn kèo bóng đá euro sẽ thất bại với một thông báo lỗi.

tupletableslot *
EXECFOREIGNDELETE (bất động sản *bất động sản,
                   Resultrelinfo *rinfo,
                   TuppletablesLot *slot,
                   Tupletableslot *planlot);

Xóa một tuple khỏi Bàn kèo bóng đá euro.Estatelà trạng thái thực thi toàn cầu kèo bóng đá euro truy vấn.rinforesultrelInfoCấu trúc mô tả mục tiêu Bàn kèo bóng đá euro.khe27321_27403plannotchứa bộ tuple đó là được tạo bởiModifyTableKế hoạch SUBS SUBS kèo bóng đá euro nút; Cụ thể, nó sẽ mang bất kỳ cột rác nào được yêu cầu bởi. (kèo bóng đá euro) cột rác phải được sử dụng để xác định tuple sẽ bị xóa.

Giá trị trả về là một khe chứa hàng bị xóa hoặc null nếu không có hàng nào bị xóa (thường là kết quả kèo bóng đá euro kích hoạt). Thông quaslotcó thể được sử dụng để giữ tuple để được trả về.

Dữ kèo bóng đá euro trong khe được trả về chỉ được sử dụng nếuXóaTruy vấn cóTrở vềmệnh đề. Do đó, FDW có thể chọn tối ưu hóa việc trả lại một số hoặc tất cả kèo bóng đá euro cột tùy thuộc vào nội dung củaTrở vềmệnh đề. Tuy nhiên, một số khe phải được trả lại để kèo bóng đá euro biết thành công hoặc truy vấn Số lượng hàng được báo cáo sẽ sai.

NếuEXECFORIGNDELETECon trỏ được đặt thànhnull, cố gắng xóa khỏi Bàn kèo bóng đá euro sẽ thất bại với một thông báo lỗi.

VOID
FortforeignModify (bất động sản *bất động sản,
                  Resultrelinfo *rinfo);

28680_28865

NếuendforeignmodifyCon trỏ là Đặt thànhnull, Không có hành động nào được thực hiện trong thời gian Tắt máy thực thi.

int
IsforeignRelupDatable (quan hệ rel);

Báo cáo cập nhật hoạt động của Bàn kèo bóng đá euro được chỉ định hỗ trợ. Giá trị trả lại phải là một sự kiện Bitmask của quy tắc Những con số cho biết các hoạt động nào được hỗ trợ bởi người kèo bóng đá euro bảng, sử dụngcmdtypeliệt kê; cái đó là,(1 << cmd_update) = 4kèo bóng đá euroCập nhật, (1 << Cmd_insert) = 8kèo bóng đá euroChèn(1 << cmd_delete) = 16kèo bóng đá euroXóa.

NếuisforeignRelupDatableCon trỏ được đặt thànhnull, Bảng kèo bóng đá euro là giả sử là có thể chèn, có thể cập nhật hoặc có thể thực hiện nếu FDW Cung cấpEXECFORIGNINSERT, EXECFORIGNUPDATEhoặcExecforeIgnDeletetương ứng. Hàm này là Chỉ cần nếu FDW hỗ trợ một số bảng có thể cập nhật và một số không. (Ngay cả sau đó, có thể sử dụng lỗi Trong thói quen thực thi thay vì kiểm tra chức năng này. Tuy nhiên, chức năng này được sử dụng để xác định khả năng cập nhật kèo bóng đá euro Hiển thị trongthông tin_schemaChế độ xem.)

52.2.3. kèo bóng đá euro thói quen FDW choGiải thích

Void
Giải thích BoreforignScan (Nút kèo bóng đá euro *, nút,
                    Giải thích *es);

In bổ sungGiải thíchđầu ra cho a Quét bàn kèo bóng đá euro. Chức năng này có thể gọiGiải thíchPropertyTextvà kèo bóng đá euro chức năng liên quan để thêm kèo bóng đá euro trường đếnGiải thíchđầu ra. Cờ kèo bóng đá euro trường trongescó thể được sử dụng để xác định những gì để in và trạng thái kèo bóng đá euroForeignScanStateNode có thể được kiểm tra để cung cấp Thống kê thời gian chạy trongGiải thích Phân tíchCASE.

NếuGiải thích FormentIgnScanCon trỏ được đặt thànhnull, Không có thông tin bổ sung nào được in trongGiải thích.

VOID
Giải thích trước khi điều chỉnh (ModifyTablestate *MTState,
                      Resultrelinfo *rinfo,
                      Danh sách *FDW_Private,
                      int subplan_index,
                      Cấu trúc giải thích *es);

In bổ sungGiải thíchđầu ra cho a Cập nhật bàn kèo bóng đá euro. Chức năng này có thể gọiGiải thíchPropertyTextvà kèo bóng đá euro chức năng liên quan để thêm kèo bóng đá euro trường đếnGiải thíchđầu ra. Cờ kèo bóng đá euro trường trongescó thể được sử dụng để xác định những gì để in và trạng thái kèo bóng đá euroModifyTablestateNode có thể được kiểm tra để cung cấp Thống kê thời gian chạy trongGiải thích Phân tíchtrường hợp. Bốn đối số đầu tiên giống như đối vớiBeginForignModify.

NếuGiải thích trước khi điều chỉnhCon trỏ được đặt thànhnull, không có thêm thông tin được in trongGiải thích.

52.2.4. kèo bóng đá euro thói quen FDW choPhân tích

Bool
Phân tích BoreforignTable (quan hệ quan hệ,
                     Aces
                     BlockNumber *Tổng số);

Hàm này được gọi khiPhân tíchđược thực thi trên bàn kèo bóng đá euro. Nếu như FDW có thể thu thập số liệu thống kê cho bàn kèo bóng đá euro này, nó nên trở lạiTRUE, và cung cấp một con trỏ cho a chức năng sẽ thu thập kèo bóng đá euro hàng mẫu từ bảng trongfunc33077_3313033150_33162. Nếu không, trở lạiSai.

Nếu FDW không hỗ trợ thu thập số liệu thống kê kèo bóng đá euro bất kỳ Bảng, ThePhân tích trước khi thiết kếCon trỏ có thể được đặt thànhnull.

Nếu được cung cấp, chức năng thu thập mẫu phải có chữ ký

int
AcceresamplerowsFunc (quan hệ quan hệ, int elevel,
                       Nặng tràng *hàng, int targrows,
                       Double *TotalRows,
                       Double *TotalDeadRows);

Một mẫu ngẫu nhiên lên đếnTargrowsHàng phải được thu thập từ bảng và được lưu trữ vào do người gọi cung cấphàng33882_34058TotalRowsTotalDeadrows. (BộTotalDeadrowsđến 0 nếu FDW không có bất kỳ Khái niệm về hàng chết.)