PostgreSQL 9.3.25 Tài kèo bóng đá euro | ||||
---|---|---|---|---|
prev | UP | Chương 52. Viết Một trình bao bọc dữ liệu kèo bóng đá euro | NEXT |
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.
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àForeignTableIDlàpg_ 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ởiGetforeignplan
14208_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 FormentIgnScan
vàendforeignscan
.
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ớ trongBeginForignScan
Nế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.
16950_17113
VOID AddforeignupDateTargets (truy vấn *parsetree, RangetBlentry *target_rte, Quan hệ Target_Relation);
Cập nhậtvàXó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_rtevàTarget_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 đếnBeginForignModify
Trong 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ạchlàModifyTableKế 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ếuplanforeignmodify
Con 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 đá euroBeginForignModify
sẽ 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
,
ExecforeIgnupDate
hoặcExecforeIgnDelete
sẽ đượ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.rinfolàresultrelInfoCấ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ỉnh
vàendforeignmodify
.
NếuBeginForignModify
Con 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.rinfolàresultrelInfoCấ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ếuEXECFORIGNINSERT
Con 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.rinfolàresultrelInfoCấ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_26706
Con 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.rinfolàresultrelInfoCấ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ếuEXECFORIGNDELETE
Con 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ếuendforeignmodify
Con 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ènvà(1 << cmd_delete) = 16kèo bóng đá euroXóa.
NếuisforeignRelupDatable
Con 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
,
EXECFORIGNUPDATE
hoặcExecforeIgnDelete
tươ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.)
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íchPropertyText
và 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 FormentIgnScan
Con 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íchPropertyText
và 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ỉnh
Con trỏ được đặt thànhnull, không có thêm
thông tin được in trongGiải thí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_34058TotalRowsvàTotalDeadrows. (BộTotalDeadrowsđến 0 nếu FDW không có bất kỳ Khái niệm về hàng chết.)