Phiên bản được hỗ trợ:hiện tại(17)16/15/14/13
Phiên bản phát triển: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/9.0/8.4/8.3/8.2/8.1/8.0/7.4/7.3/7.2/7.1
Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng kèo bóng đá hom nay trang chohiện tạiPhiên bản hoặc một trong kèo bóng đá hom nay phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

35.9. kèo bóng đá hom nay ngữ c

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 nayCTrong cả hai trường hợp. kèo bóng đá hom nay chức năng kiểu cũ là

35.9.1. Tải động

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:

  1. Nếu tên là đường dẫn tuyệt đối, tệp đã cho được tải.

  2. 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,

  3. Nếu tên không chứa phần thư mục, tệp làDynamic_l Library_path.

  4. 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_finisẽ chỉ được gọi trong khi

35.9.2. kèo bóng đá hom nay loại cơ sở bằng tiếng c

Để 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ổ,PalloC

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ể

35.9.3. Phiên bản

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

35.9.4. Phiên bản

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

35.9.5. Viết

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 nayPalloCPFREEThay vì kèo bóng đá hom nay chức năng thư viện C tương ứngmallocmiễn phí.PalloCWill

  • 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.Hpalloc.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

35.9.6. Biên dịch và

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

FreeBSD

Cờ trình biên dịch để tạopic-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.

HP-UX

Cờ trình biên dịch của trình biên dịch hệ thống để tạopic+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

IRIX

piclà mặc định, không-shared.

CC -C FOO.C
Linux

Cờ trình biên dịch để tạopic-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
Mac OS X

Đâ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
NetBSD

Cờ trình biên dịch để tạopic-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
OpenBSD

Cờ trình biên dịch để tạopic-FPIC.ld -bsharableđược sử dụng để liên kết chia sẻ

GCC -FPIC -C FOO.C
Solaris

Cờ trình biên dịch để tạopic-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
TRU64 UNIX

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

Unixware

Cờ trình biên dịch để tạopic-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ẻ

35.9.7.

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_overpaidAs:

#include "Postgres.h"

Trong mã hóa phiên bản-1, ở trên sẽ trông như thế này:

#include "Postgres.h"

GetAttributionByNamePostgreSQLkèo bóng đá hom nay hệ thống đóHeaptupleHeaderđược truyền vào kèo bóng đá hom nay, tên củaGetAttributionByNameTrả 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_overpaidTrong 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

35.9.8.

Để 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_tuplecho mỗi hàng. Khi làm việc với Ctupledescđếntupledescgetattinmetadata, và sau đóbuildTupleFromCStringscho 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_typecó 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_typeCó anh chị emGET_EXPR_RESULT_TYPE,,get_func_result_type, có thể được sử dụng khi chỉRecordget_func_result_typeKhô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.

35.9.9. Trả về kèo bóng đá hom nay bộ

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ẽPFREETrê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ề

35.9.10.

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,AnyenumAnyrange. 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 (fmgrinfoget_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_TYPEcũ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_arrayTrong 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.

35.9.11. Chuyển đổi kèo bóng đá hom nay chức năng

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

35.9.12. Chia sẻ

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_initkè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ụngaddinshmeminitlockKhi nào

MyStruct static *ptr = null;

35.9.13.

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óaTrong 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