Postgresql 9.3.25 Tài liệu | ||||
---|---|---|---|---|
prev | UP | Chương 35.SQL | NEXT |
kèo bóng đá hom nay chức năng do người dùng xác định có thể được viết bằng C (hoặc ngôn ngữ mà"ckèo bóng đá hom nay từ"Nội bộ"Hàm - kèo bóng đá hom nay quy ước mã hóa thực tế
Hai quy ước gọi khác nhau hiện đang được sử dụng cho C"Phiên bản 1"Gọipg_function_info_v1 ()cuộc gọi macro cho kèo bóng đá hom nay,"Phiên bản 0") Hàm. kèo bóng đá hom nay ngữTạo kèo bóng đá hom naylàCTrong cả hai trường hợp. kèo bóng đá hom nay chức năng kiểu cũ là
Lần đầu tiên chức năng do người dùng xác định trong kèo bóng đá hom nay tải cụ thể có thể tảiTạo kèo bóng đá hom nayĐối với kèo bóng đá hom nay người dùng do người dùng xác định
Thuật toán sau được sử dụng để định vị tệp đối tượng được chia sẻTạolệnh:
Nếu tên là đường dẫn tuyệt đối, tệp đã cho được tải.
Nếu tên bắt đầu bằng chuỗi$ libdir, phần đó được thay thế bằngPostgreSQLTên thư mục thư viện gói,
Nếu tên không chứa phần thư mục, tệp làDynamic_l Library_path.
Nếu không (tệp không được tìm thấy trong đường dẫn hoặc nó chứa kèo bóng đá hom nay
Nếu chuỗi này không hoạt động, chia sẻ dành riêng cho nền tảng.so)
Nên định vị kèo bóng đá hom nay thư viện được chia sẻ liên quan đến$ libdirhoặc thông qua thư viện động$ libdirViết tắt có thể được tìm thấy với lệnhpg_config - -pkglibdir.
ID người dùngPostgreSQLMáy chủ chạy vì phải có thể đi qua đường dẫn đến tệp bạnPostgresNgười dùng là kèo bóng đá hom nay sai lầm phổ biến.
Trong mọi trường hợp, tên tệp được đưa ra trongtạo kèo bóng đá hom naylệnh được ghi lại theo nghĩa đen trong
Lưu ý: PostgreSQLWillTạoLệnh. Nhìn thấyPhầnĐể biết thêm thông tin.
Để đảm bảo rằng tệp đối tượng được tải động không được tảiPostgreSQLKiểm tra xem tệp có chứa"Khối ma thuật"Với thích hợpPostgreSQL. kèo bóng đá hom nay phép thuậtPostgreSQL8.2. Để bao gồm kèo bóng đá hom nay khối ma thuật, hãy viết nó vào kèo bóng đá hom nay (và chỉ kèo bóng đá hom nay)fmgr.h:
#ifdef pg_module_magic
The#ifdefCó thể bỏ qua kiểm tra nếuPostgreSQLphát hành.
Sau khi nó được sử dụng lần đầu tiên, kèo bóng đá hom nay đối tượng được tải động được tải
Tùy chọn, kèo bóng đá hom nay tệp được tải động có thể chứa khởi tạo_pg_init
, kèo bóng đá hom nay đó sẽ_pg_fini
, kèo bóng đá hom nay đó sẽ_pg_fini
sẽ chỉ được gọi trong khi
Để biết cách viết kèo bóng đá hom nay chức năng ngôn ngữ C, bạn cần biết làm thế nàoPostgreSQLĐại diện nội bộPostgreSQLTrân trọng a"Blob of Memory". kèo bóng đá hom nayPostgreSQLcó thểPostgreSQLsẽ chỉ lưu trữ và truy xuất dữ liệu từ đĩa và sử dụng
kèo bóng đá hom nay loại cơ sở có thể có một trong ba định dạng nội bộ:
Pass by giá trị, độ dài cố định
Pass By tham chiếu, có độ dài cố định
Pass by tham chiếu, độ dài biến
kèo bóng đá hom nay loại giá trị chỉ có thể là 1, 2 hoặc 4 byte theo chiều dài (cũng là 8sizeof (mốc dữ liệu)là 8 trênLongLoại nguy hiểm vì nó là 4intLoại là 4 byte trên hầu hết kèo bóng đá hom nay máy Unix. Một hợp lýINT4gõ trên Unix
/ * 4 byte số nguyên, được truyền theo giá trị */
(Mã PostgreSQL C thực tế gọi loại nàyINT32, bởi vì đó là kèo bóng đá hom nay quy ước trong C màintXXcó nghĩa làXX bit. Do đó, lưu ý rằng CINT8có kích thước 1 byte. Loại SQLINT8được gọi làint64inBảng.)
Mặt khác, kèo bóng đá hom nay loại có độ dài cố định có thể được truyềnPostgreSQLloại:
/ * Cấu trúc 16 byte, được truyền qua tham chiếu */
Chỉ có thể sử dụng kèo bóng đá hom nay con trỏ như vậy khi chuyển chúng vào vàPostgreSQLkèo bóng đá hom nay. ĐẾNPalloC, Điền vào bộ nhớ được phân bổ,PalloCvà
Cuối cùng, tất cả kèo bóng đá hom nay loại có độ dài thay đổi cũng phải được truyền quaset_varsize; Không bao giờ đặt trường này trực tiếp!
kèo bóng đá hom nay điểm quan trọng khác là tránh để lại bất kỳ sự không chính thức nào
Cảnh báo |
không bao giờSửa đổiPhần 35.10. |
Ví dụ, chúng ta có thể xác định loạiTextnhư sau:
Typedef Struct
Rõ ràng, trường dữ liệu được khai báo ở đây không đủ dài đểC, Chúng tôiCTrình biên dịch sẽ không kiểm tra kèo bóng đá hom nay chỉ số mảng kiểm tra phạm vi. Chúng tôi chỉ phân bổ
Khi thao tác kèo bóng đá hom nay loại có độ dài biến, chúng ta phải cẩn thận vớiTextCấu trúc, chúng ta có thể sử dụng mã
#include "Postgres.h"
Varhdrszgiống nhưsizeof (int32), nhưng nó được coi là phong cách tốt để sử dụngVarhdrszđể chỉ kích thước củaphảiđược đặt bằngset_varsizeMacro, không đơn giản
Bảng 35-1Chỉ định loại c tương ứng với loại SQL khi viết aPostgreSQL. The"được xác địnhCột đưa ra tệp tiêu đề cần được đưa vàoPostgres.hĐầu tiên trong bất kỳ tệp nguồn nào, vì nó tuyên bố kèo bóng đá hom nay số điều
Bảng 35-1. kèo bóng đá hom nay loại C tương đương cho kèo bóng đá hom nay loại SQL tích hợp
SQL Loại | C Loại | được xác định trong |
---|---|---|
Abstime | Absolutetime | Utils/nabstime.h |
Boolean | bool | Postgres.h(có thể là trình biên dịch |
Box | Box* | UTILS/GEO_DECLS.H |
bytea | bytea* | Postgres.h |
"Char" | char | (trình biên dịch tích hợp) |
Nhân vật | bpchar* | Postgres.h |
CID | CommandID | Postgres.h |
ngày | dateadt | Utils/date.h |
SmallInt(INT2) | INT16 | Postgres.h |
int2Vector | int2Vector* | Postgres.h |
Số nguyên(INT4) | INT32 | Postgres.h |
Real(float4) | float4* | Postgres.h |
Double Precision(float8) | float8* | Postgres.h |
Khoảng | Khoảng* | DataType/Timestamp.h |
LSEG | lseg* | UTILS/GEO_DECLS.H |
tên | tên | Postgres.h |
OID | oid | Postgres.h |
oidvector | oidvector* | Postgres.h |
đường dẫn | đường dẫn* | UTILS/GEO_DECLS.H |
điểm | điểm* | UTILS/GEO_DECLS.H |
RegProc | RegProc | Postgres.h |
relime | Relativetime | Utils/nabstime.h |
Text | Text* | Postgres.h |
TID | itempulum | lưu trữ/itemptr.h |
thời gian | Timeadt | Utils/date.h |
Thời gian với múi giờ | Timetzadt | Utils/date.h |
Dấu thời gian | dấu thời gian* | DataType/Timestamp.h |
Tinterval | Timeinterval | Utils/nabstime.h |
Varchar | Varchar* | Postgres.h |
XID | Giao dịchID | Postgres.h |
Bây giờ chúng tôi đã vượt qua tất cả kèo bóng đá hom nay cấu trúc có thể
Chúng tôi trình bày"Kiểu cũ"Gọi
Đây là kèo bóng đá hom nay số ví dụ:
#include "Postgres.h"
Giả sử rằng mã trên đã được chuẩn bị trong tệpfuncs.cvà được biên dịch thành kèo bóng đá hom nay chia sẻPostgreSQLVới kèo bóng đá hom nay lệnh như thế này:
Tạo kèo bóng đá hom nay add_one (số nguyên) Trả về số nguyênThư mục/funcs ',' add_one 'Thư mục/funcs ',' add_one_float8 'Thư mục/funcs ',' makepoint 'Thư mục/funcs ',' copytext 'Thư mục/funcs ',' concat_text '
ở đây,Thư mụclà viết tắt củaPostgreSQLThư mục hướng dẫn, chứa'funcs'trongASmệnh đề, sau khi đã thêmThư mụcđến đường dẫn tìm kiếm. Trong mọi trường hợp, chúng tôi.sohoặc.SL.)
Lưu ý rằng chúng tôi đã chỉ định kèo bóng đá hom nay chức năng là"nghiêm ngặt", có nghĩa là hệ thống nên
Mặc dù quy ước gọi này là đơn giản để sử dụng, nhưng nó khôngintCách này. Ngoài ra, không có cách nào đơn giản để trả về kèo bóng đá hom nay kết quả null, cũng không
Quy ước gọi phiên bản-1 dựa trên kèo bóng đá hom nay macro để đàn áp
Datum funcname (pg_function_args)
Ngoài ra, cuộc gọi macro:
pg_function_info_v1 (funcname);
phải xuất hiện trong cùng kèo bóng đá hom nay tệp nguồn. (Thông thường, nóNội bộPostgreSQLGiả sử tất cả
Trong kèo bóng đá hom nay phiên bản-1, mỗi đối số thực tế được tìm nạp bằng cách sử dụngpg_getarg_xxx()
Macro tương ứng vớipg_return_xxx()
Macro cho loại trả về.pg_getarg_xxx()
lấy đối số của nópg_return_xxx()
lấy đối số của nó thực tế
Ở đây chúng tôi hiển thị kèo bóng đá hom nay chức năng giống như trên, được mã hóa trong phiên bản-1
#include "Postgres.h"
TheTạo kèo bóng đá hom naykèo bóng đá hom nay lệnh là
Thoạt nhìn, kèo bóng đá hom nay quy ước mã hóa phiên bản-1 có thể xuất hiệnadd_one_float8
, chúng ta không còn cần phải biếtfloat8là loại tham chiếu qua.GetArgMacros"Nướng"(nén hoặc ngoài đường)
Một cải tiến lớn về kèo bóng đá hom nay chức năng phiên bản-1 là xử lý tốt hơnpg_argisnull (n)
Cho phép một kèo bóng đá hom nay kiểm tra xem mỗi đầu vào có phải là null hay không. (Tất nhiên rồi,"nghiêm ngặt".) Như vớipg_getarg_xxx()
macro, kèo bóng đá hom nay đối số đầu vào được tính bắt đầu ở 0. Ghi chúpg_getarg_xxx()
Cho đến khi người ta xác minh rằng đối số không phải là null. Để trả lại apg_return_null ()
; Điều này hoạt động trong cả nghiêm ngặt và
kèo bóng đá hom nay tùy chọn khác được cung cấp trong giao diện kiểu mới là haipg_getarg_xxx()
Macros. Cái đầu tiên trong số này,pg_getarg_xxx_copy ()
, đảm bảo trả lại apg_getarg_xxx_copy ()
macro đảm bảo apg_getarg_xxx_slice ()
Macro mất ba"Bên ngoài". (Loại lưu trữ của kèo bóng đá hom nay cột có thểBẢNG ALTERTableNameCột thay đổicolnameĐặt lưu trữStorAgetype.StorAgetypelà kèo bóng đá hom nay trongtrơn,bên ngoài,mở rộnghoặcchính.)
Cuối cùng, kèo bóng đá hom nay quy ước gọi chức năng phiên bản-1 làm cho nóPhần 35.9.9) và thực hiệnChương 36) vàChương). Mã phiên bản-1 cũng di động hơn phiên bản-0,Trong nguồn
Trước khi chúng ta chuyển sang kèo bóng đá hom nay chủ đề nâng cao hơn, chúng ta nên thảo luậnPostgreSQLHàm ngôn ngữ c. Mặc dù có thể tải kèo bóng đá hom nay chức năngPostgreSQL, điều này thường khó khăn (khi nó
kèo bóng đá hom nay quy tắc cơ bản để viết và xây dựng kèo bóng đá hom nay chức năng C là
sử dụngpg_config--includedir-serverđếnPostgreSQLkèo bóng đá hom nay tệp tiêu đề máy chủ được cài đặt trên hệ thống của bạn (hoặc hệ thống
biên dịch và liên kết mã của bạn để nó có thể được độngPostgreSQLLuôn luônPhầnĐể giải thích chi tiết về cách thực hiện cho bạn
Hãy nhớ xác định A"Khối ma thuật"Đối với thư viện chia sẻ của bạn, như được mô tả trongPhần 35.9.1.
Khi phân bổ bộ nhớ, hãy sử dụngPostgreSQLkèo bóng đá hom nayPalloC
vàPFREE
Thay vì kèo bóng đá hom nay chức năng thư viện C tương ứngmalloc
vàmiễn phí
.PalloC
Will
Luôn luôn không kèo bóng đá hom nay byte của cấu trúc của bạn bằng cách sử dụngMemset
(hoặc phân bổ chúng bằngPalloC0
Ở nơi đầu tiên). Ngay cả khi bạn gán
Hầu hết kèo bóng đá hom nay bên trongPOSTGRESQLkèo bóng đá hom nay loại được khai báo trongPostgres.h, trong khipg_function_args, v.v.)fmgr.h, vì vậy bạn sẽ cần bao gồm ít nhấtPostgres.h Đầu tiên, trước bất kỳ hệ thống nào khác hoặcPostgres.hcũng sẽ bao gồmELOG.Hvàpalloc.hcho bạn.
Tên biểu tượng được xác định trong kèo bóng đá hom nay tệp đối tượng không được xung đột vớiPostgreSQLCó thể thực thi máy chủ. Bạn sẽ phải
Trước khi bạn có thể sử dụngPOSTGRESQLkèo bóng đá hom nay chức năng mở rộng được viết bằng C,Thư viện chia sẻcần được tạo.
Để biết thông tin vượt ra ngoài những gì có trong phần này, bạnCCvà Trình chỉnh sửa liên kết,LD. Ngoài ra,PostgreSQLMã nguồn chứa kèo bóng đá hom nay sốĐóng gópThư mục. Nếu bạn dựa vào kèo bóng đá hom nay ví dụ này, bạn sẽ thực hiện kèo bóng đá hom nay mô -đun của mìnhPOSTGRESQLTuy nhiên, mã nguồn.
Tạo thư viện chia sẻ thường tương tự như liên kếtMã độc lập vị trí(pic), có nghĩa là về mặt khái niệm
Trong kèo bóng đá hom nay ví dụ sau, chúng tôi cho rằng mã nguồn của bạn ởfoo.cVà chúng tôi sẽ tạo kèo bóng đá hom nay chia sẻfoo.so. Đối tượng trung gianfoo.otrừ khi
Cờ trình biên dịch để tạopiclà-FPIC. Để tạo-shared.
GCC -FPIC -C FOO.C
Điều này được áp dụng theo phiên bản 3.0 củaFreeBSD.
Cờ trình biên dịch của trình biên dịch hệ thống để tạopiclà+Z. Khi sử dụngGCCĐó là-fpic. Cờ liên kết để chia sẻ-B. Vì thế:
CC +Z -C FOO.C
hoặc:
GCC -FPIC -C FOO.C
và sau đó:
ld -b -o foo.sl foo.o
HP-UXSử dụng tiện ích mở rộng.SLĐối với kèo bóng đá hom nay thư viện được chia sẻ, không giống như hầu hết
piclà mặc định, không-shared.
CC -C FOO.C
Cờ trình biên dịch để tạopiclà-FPIC. kèo bóng đá hom nay-shared. kèo bóng đá hom nay ví dụ hoàn chỉnh trông như thế này:
cc -fpic -c foo.c
Đây là một ví dụ. Nó giả định kèo bóng đá hom nay công cụ nhà phát triển là
CC -C FOO.C
Cờ trình biên dịch để tạopiclà-FPIC. VìelfHệ thống, trình biên dịch với-sharedđược sử dụng để liên kết chia sẻLDđược sử dụng.
GCC -FPIC -C FOO.C
Cờ trình biên dịch để tạopiclà-FPIC.ld -bsharableđược sử dụng để liên kết chia sẻ
GCC -FPIC -C FOO.C
Cờ trình biên dịch để tạopiclà-KPICvới-FPICvớiGCC. Để liên kết kèo bóng đá hom nay thư viện được chia sẻ, trình biên dịch-gvới trình biên dịch hoặc-sharedvớiGCC.
cc -kpic -c foo.c
hoặc
GCC -FPIC -C FOO.C
piclà mặc định, vì vậyLDvới kèo bóng đá hom nay tùy chọn đặc biệt được sử dụng để thực hiện liên kết.
CC -C FOO.C
Quy trình tương tự được sử dụng với GCC thay vì hệ thống
Cờ trình biên dịch để tạopiclà-K picvới-FPICvớiGCC. Để liên kết kèo bóng đá hom nay thư viện được chia sẻ, trình biên dịch-gVới trình biên dịch SCO và-sharedvớiGCC.
CC -K pic -c foo.c
hoặc
GCC -FPIC -C FOO.C
Tip:Nếu điều này quá phức tạp đối với bạn, bạn nêngnu libtool,,
Tệp thư viện chia sẻ kết quả sau đó có thể được tải vàoPostgreSQL. Khi chỉ địnhTạo kèo bóng đá hom nayLệnh,.sohoặc.SL) có thể được bỏ qua từTạo kèo bóng đá hom naylệnh và thông thường nên được
Tham khảo lạiPhầnVề nơi máy chủ mong đợi tìm được chia sẻ
kèo bóng đá hom nay loại tổng hợp không có bố cục cố định như cấu trúc C.PostgreSQLCung cấp giao diện chức năng để truy cập kèo bóng đá hom nay trường tổng hợp
Giả sử chúng ta muốn viết kèo bóng đá hom nay chức năng để trả lời truy vấn:
Chọn Tên, C_OverPaid (EMP, 1500) làm trả quá nhiều tiền
Sử dụng quy ước gọi phiên bản 0, chúng ta có thể xác địnhc_overpaid
As:
#include "Postgres.h"
Trong mã hóa phiên bản-1, ở trên sẽ trông như thế này:
#include "Postgres.h"
GetAttributionByName
làPostgreSQLkèo bóng đá hom nay hệ thống đóHeaptupleHeaderđược truyền vào kèo bóng đá hom nay, tên củaGetAttributionByName
Trả về ADatumGiá trị mà bạn có thể chuyển đổi sang dữ liệu phù hợpDatumgetxxx()
Macro. Lưu ý rằng giá trị trả về là vô nghĩa nếu cờ null
Ngoài ra còn cóGetAttributionByNum
,,
Lệnh sau tuyên bố kèo bóng đá hom nayc_overpaid
Trong SQL:
Tạo kèo bóng đá hom nay c_overpaid (EMP, Integer) Trả về BooleanThư mục/funcs ',' c_overpaid '
Thông báo chúng tôi đã sử dụngnghiêm ngặtVì vậy, chúng tôi
Để trả lại giá trị loại hoặc loại tổng hợp từ kèo bóng đá hom nay ngữ c
#include "funcapi.h"
Có hai cách bạn có thể xây dựng giá trị dữ liệu tổng hợp"tuple"): Bạn có thể xây dựng nótupledescMô tả chotupledescđếnBlesstupledesc
, rồi gọiheap_form_tuple
cho mỗi hàng. Khi làm việc với Ctupledescđếntupledescgetattinmetadata
, và sau đóbuildTupleFromCStrings
cho mỗi
kèo bóng đá hom nay số chức năng trợ giúp có sẵn để thiết lập cần thiếttupledesc. Cách đề nghị để làm
55959_56138
Vượt qua cùng kèo bóng đá hom nayfcinfoStruct đã vượt quaresultTypeIDcó thể được chỉ định lànullhoặc là địa chỉ của biến cục bộ đểresulttupledescnên là địa chỉ của kèo bóng đá hom nay địa phươngtupledescBiến. Kiểm tra xemTYPEFUNC_COMPISE; Nếu vậy,resultTupledescđã được lấp đầy bởitupledesc. (Nếu nó không, bạn"Hồ sơ trả về kèo bóng đá hom nay được gọi trong ngữ cảnh không thể.)
Tip:
get_call_result_type
có thể giải quyết loại thực tế của kết quả kèo bóng đá hom nay đa hình; Vì vậy, nóresultTypeIDĐầu ra chủ yếu hữu ích cho
Lưu ý:
get_call_result_type
Có anh chị emGET_EXPR_RESULT_TYPE
,,get_func_result_type
, có thể được sử dụng khi chỉRecordvàget_func_result_type
Không thể giải quyết đa hìnhGET_CALL_RESULT_TYPE
.
kèo bóng đá hom nay chức năng cũ hơn, hiện đang được ghi nhận để có đượctupledescS là:
58340_58398
Để nhậntupledescĐối với loại hàng
58528_58588
để nhậntupledescDựa trên kèo bóng đá hom nay loạitupledesccho loại cơ sở hoặc loại tổng hợp. Nó sẽRecordTuy nhiên, và nó không thể giải quyết
kèo bóng đá hom nay khi bạn cótupledesc, gọi:
58991_59037
Nếu bạn có kế hoạch làm việc với kèo bóng đá hom nay mốc dữ liệu hoặc:
59114_59176
Nếu bạn có kế hoạch làm việc với kèo bóng đá hom nay chuỗi C. Nếu bạn đang viết mộtfunccallcontextCấu trúc - Sử dụngTuple_deschoặcAttinMetatrường tương ứng.
Khi làm việc với Datums, sử dụng:
59553_59629
Để xây dựng AHeaptupleđã cho dữ liệu người dùng
Khi làm việc với kèo bóng đá hom nay chuỗi C, sử dụng:
59790_59866
Để xây dựng AHeaptupleđã cho dữ liệu người dùngGiá trịlà kèo bóng đá hom nay mảng của cGiá trịmảng phải được đặt thànhnull. kèo bóng đá hom nay này sẽ cần được gọi lại cho
kèo bóng đá hom nay khi bạn đã xây dựng kèo bóng đá hom nay tuple để trở về từ chức năng của mình, nóDatum. Sử dụng:
60560_60597
Để chuyển đổi AHeaptuplethành kèo bóng đá hom nay hợp lệDatumcó thể được trả về trực tiếp nếu
kèo bóng đá hom nay ví dụ xuất hiện trong phần tiếp theo.
Ngoài ra còn có API đặc biệt cung cấp hỗ trợ để trả lạifuncapi.h, như
kèo bóng đá hom nay hoàn trả SET (SRF) được gọi kèo bóng đá hom nay lần cho mỗi mục mà nó trả về.SRFDo đó phải lưufunccallcontextđược cung cấp để giúp kiểm soát điều nàyfcinfo- flinfo- fn_extrađược sử dụng để giữ kèo bóng đá hom nayfunccallcontextBên kia
Cấu trúc typedef
ANSRFSử dụng kèo bóng đá hom nay số chức năngfunccallcontextCấu trúc (và mong đợi tìm thấy nófn_extra). Sử dụng:
srf_is_firstcall ()
Để xác định xem kèo bóng đá hom nay của bạn có được gọi cho đầu tiên hay a
srf_firstcall_init ()
Để khởi tạofunccallcontext.
srf_percall_setup ()
Để thiết lập đúng cách sử dụngfunccallcontextvà xóa bất kỳ trước đó
Nếu kèo bóng đá hom nay của bạn có dữ liệu để trả về, hãy sử dụng:
srf_return_next (funcctx, result)
Để trả lại cho người gọi. (resultphải loạiDatum, kèo bóng đá hom nay giá trị duy nhất
srf_return_done (funcctx)
Để dọn dẹp và kết thúcSRF.
Bối cảnh bộ nhớ hiện tại khiSRFđược gọi là bối cảnh thoáng qua sẽPFREE
Trên mọi thứ bạn đã phân bổPalloC
; Nó sẽ biến mất dù sao.multi_call_memory_ctxISSRFđược hoàn thành đang chạy. Trong hầu hếtMulti_call_memory_ctxTrong khi thực hiện cuộc gọi đầu tiên
kèo bóng đá hom nay ví dụ Pseudo-Code hoàn chỉnh trông giống như sau:
Datumkhai báo thêm khi cầnif (srf_is_firstcall ()))Mã người dùng Nếu trả về composite Build tupledesc và có lẽ là attinmetadata endif trả về composite Mã người dùngMemoryContextSwitchto (OldContext);Mã người dùngfuncctx = srf_percall_setup ();Mã người dùng/ * Đây chỉ là kèo bóng đá hom nay cách chúng ta có thể kiểm tra xem chúng ta đã hoàn thành: */Mã người dùng có được dữ liệu kết quảsrf_return_next (funcctx, result);Mã người dùngsrf_return_done (funcctx);
kèo bóng đá hom nay ví dụ hoàn chỉnh về đơn giảnSRFTrả về loại tổng hợp trông giống như:
pg_function_info_v1 (retcposite);
kèo bóng đá hom nay cách để khai báo chức năng này trong SQL là:
Tạo loại __retComposite AS (F1 Integer, F2 Integer, F3 Integer);FileName',' retcposite '
Một cách khác là sử dụng kèo bóng đá hom nay tham số:
Tạo hoặc thay thế kèo bóng đá hom nay retcposite (trong số nguyên, trong số nguyên,FileName',' retcposite '
Lưu ý rằng trong phương pháp này, loại đầu ra của kèo bóng đá hom nay làRecordLoại.
Thư mục71600_71619Mô -đun trong phân phối nguồn chứa nhiều ví dụ hơn về
kèo bóng đá hom nay hàm ngôn ngữ C có thể được khai báo để chấp nhận và trả lạiAnyEuity,AnyArray,Anynonarray,AnyenumvàAnyrange. Nhìn thấyPhầnĐể giải thích chi tiết hơn về đa hìnhfmgr.hĐể cho phép aget_fn_expr_rettype (fmgrinfovàget_fn_expr_argtype (fmgrinfo. Họ trả về kết quả hoặc loại đối sốkhông hợp lệNếu thông tin làflinfoISfcinfo- flinfo.Argnumbằng không.GET_CALL_RESULT_TYPE
cũng có thể được sử dụngget_fn_expr_rettype
. Ngoài ra còn cóGET_FN_EXPR_VARIADIC
, có thể được sử dụng để tìmVariadic "Any"kèo bóng đá hom nay chức năng, vì sự hợp nhất đó sẽ luôn xảy ra
Ví dụ: giả sử chúng ta muốn viết kèo bóng đá hom nay chức năng để chấp nhận a
pg_function_info_v1 (make_array);
Lệnh sau tuyên bố kèo bóng đá hom naymake_array
Trong SQL:
Tạo kèo bóng đá hom nay Make_array (AnyEuity) trả về AnyArrayThư mục/funcs ',' make_array '
Có kèo bóng đá hom nay biến thể đa hình chỉ có sẵn để"bất kỳ". (Lưu ý rằng tên loại này phảiAnyEuityngoại trừ việc nó không"Any"Đối số sẽ đượcVariadic "Any". Điều này sẽ phù hợp với kèo bóng đá hom nay hoặckhôngđược thu thập thành kèo bóng đá hom nay mảng như xảy ra với variadic bình thườngpg_nargs ()
Macro và kèo bóng đá hom nay phương phápVariadicTừ khóa trong cuộc gọi kèo bóng đá hom nay của họ, vớiGET_FN_EXPR_VARIADIC
Để phát hiện điều đó thực tếVariadic.
kèo bóng đá hom nay số cuộc gọi chức năng có thể được đơn giản hóa trong quá trình lập kế hoạch dựa trênint4mul (n, 1)có thể được đơn giản hóa thành chỉn. Để xác định kèo bóng đá hom nay tối ưu hóa cụ thể về chức năng như vậy,kèo bóng đá hom nay biến đổivà đặt nóProtransformTrường củaPG_PROCmục nhập. kèo bóng đá hom nayProtransform (Nội bộ) Trả về nội bộ. kèo bóng đá hom nayfuncexpr *, là kèo bóng đá hom nay hình nộmnullCon trỏkhôngA SQL NULL).
Chúng tôi không đảm bảo rằngPOSTGRESQLSẽ không bao giờ gọi chính
Hiện tại, cơ sở này không được tiếp xúc với người dùng tại SQL
add-ins có thể bảo lưu lwlocks và phân bổ bộ nhớ chia sẻshared_preload_l Libries.
void requestaddinshmemspace (int size)
Từ bạn_pg_init
kèo bóng đá hom nay.
LWlocks được bảo lưu bằng cách gọi:
void requestAddInlWlocks (int n)
từ_pg_init
.
Để tránh kèo bóng đá hom nay điều kiện chủng tộc có thể, mỗi phụ trợ nên sử dụngaddinshmeminitlock
Khi nào
MyStruct static *ptr = null;
mặc dùPOSTGRESQLphụ trợ
Tất cả kèo bóng đá hom nay chức năng được truy cập bởi phần phụ trợ phải trình bày giao diện CExtern CLiên kết là cần thiết cho
Bộ nhớ miễn phí bằng cách sử dụng phương pháp giải quyết thích hợp. Vìpalloc ()
, vì vậy hãy sử dụngpfree ()
Để giải phóng nó. Sử dụng C ++Xóa
Trong những trường hợp như vậy sẽ thất bại.
Ngăn chặn kèo bóng đá hom nay ngoại lệ truyền vào mã C (sử dụng aExternkèo bóng đá hom nay). Điều này là cần thiết ngay cả khi mã C ++ không-FNO-EXCEPTIONđếnnew ()
.
Nếu gọi kèo bóng đá hom nay chức năng phụ trợ từ mã C ++, hãy chắc chắn rằng C ++Pod). Điều này là cần thiết vì lỗi phụ trợlongjmp ()
Điều đó
Tóm lại, tốt nhất là đặt mã C ++ phía sau bức tường củaExtern Ckèo bóng đá hom nay hàm giao diện với