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 tỷ lệ kèo bóng đá trang chohiện tạiPhiên bản hoặc một trong tỷ lệ kèo bóng đá phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

31.9. tỷ lệ kèo bóng đá ngữ c

tỷ lệ kèo bóng đá 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à"ctỷ lệ kèo bóng đá chức năng từ"Nội bộ"tỷ lệ kèo bóng đá năng - 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"quy ước gọi được chỉ định bằng cách viết Apg_function_info_v1 ()Cuộc gọi macro cho tỷ lệ kèo bóng đá năng,"Phiên bản 0") Hàm. tỷ lệ kèo bóng đá ngữTạo tỷ lệ kèo bóng đá năngCTrong cả hai trường hợp. tỷ lệ kèo bóng đá chức năng kiểu cũ

31.9.1. Tải động

Lần đầu tiên chức năng do người dùng định nghĩa trong tỷ lệ kèo bóng đá cụ thểTạo tỷ lệ kèo bóng đá năngcho a

Thuật toán sau được sử dụng để định vị đối tượng chia sẻTạolệnh:

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

  2. Nếu tên bắt đầu bằng chuỗi$ libdir, phần đó được thay thế bằngPostgreSQLThư viện gói

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

  4. Nếu không (tệp không được tìm thấy trong đường dẫn hoặc nó

Nếu chuỗi này không hoạt động,.so) được gắn vào tên đã cho và cái này

ID người dùngPostgreSQLMáy chủ chạy vì phải có thể đi qua đường dẫn đến tệpPostgresNgười dùng là tỷ lệ kèo bóng đá sai lầm phổ biến.

Trong mọi trường hợp, tên tệp được đưa ra trongTạo tỷ lệ kèo bóng đá năngLệnh được ghi lại theo nghĩa đen trong

Lưu ý: PostgreSQLsẽ không tự động biên dịch tỷ lệ kèo bóng đá c. Đối tượngTạo tỷ lệ kèo bóng đá nănglệnh. Nhìn thấyPhần 31.9.6cho

Sau khi nó được sử dụng lần đầu tiên,loadlệnh hoặc bắt đầu tỷ lệ kèo bóng đá mới

Nên định vị tỷ lệ kèo bóng đá thư viện được chia sẻ$ libdirhoặc thông qua động lực$ libdircó thể tìm thấypg_config.

trướcPostgreSQLPhát hànhTạo tỷ lệ kèo bóng đá năng. Cái này

31.9.2. tỷ lệ kèo bóng đá loại cơ sở bằng tiếng c

Để biết cách viết tỷ lệ kèo bóng đá chức năng ngôn ngữ C, bạn cần biếtPostgreSQLNội bộPostgreSQLcoi tỷ lệ kèo bóng đá cơ sở là A"Blob of Memory". Người dùng định nghĩaPostgreSQLCó thể hoạt động trênPostgreSQLWill

tỷ lệ kèo bóng đá 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, độ dài cố định

  • Truyền qua tham chiếu, độ dài biến

tỷ lệ kèo bóng đá loại giá trị chỉ có thể có chiều dài 1, 2 hoặc 4 byte (cũngsizeof (mốc dữ liệu)là 8 trênLongtỷ lệ kèo bóng đá nguy hiểmintLoại là 4 byte trên hầu hết tỷ lệ kèo bóng đá UnixINT4gõ trên máy Unix có thể là:

/ * 4 byte số nguyên, được truyền bởi giá trị */

Mặt khác, tỷ lệ kèo bóng đá loại có độ dài cố định có thểPostgreSQLtỷ lệ kèo bóng đá:

/ * Cấu trúc 16 byte, được truyền qua tham chiếu */

Chỉ có thể sử dụng tỷ lệ kèo bóng đá gợi ý cho tỷ lệ kèo bóng đá loại như vậy khi chuyển chúng vàoPostgreSQLchức năng. Để trả về giá trị của tỷ lệ kèo bóng đá loại như vậy, hãy phân bổ quyềnPalloC, điền vàokhông bao giờSửa đổi

Cuối cùng, tất cả tỷ lệ kèo bóng đá loại có độ dài thay đổi cũng phải được truyền qua

Ví dụ, chúng ta có thể xác định tỷ lệ kèo bóng đáTextnhư sau:

Typedef Struct

Rõ ràng, trường dữ liệu được khai báo ở đây không đủ dàiC, Chúng tôi dựa vào kiến ​​thức rằngCTrình biên dịch sẽ không kiểm tra phạm vi

Khi thao tác tỷ lệ kèo bóng đá loại có độ dài biến, chúng ta phải cẩn thậnTextcấu trúc, chúng ta có thể sử dụng tỷ lệ kèo bóng đá

#include "Postgres.h"

Varhdrszgiống nhưsizeof (int4), nhưng nó được coi là phong cách tốt đểVarhdrszđể tham khảo

Bảng 31-1Chỉ định tỷ lệ kèo bóng đá c tương ứng với tỷ lệ kèo bóng đá SQL khiPostgreSQL. The"Được xác định trong"Cột đưa ra tệp tiêu đề màPostgres.hĐầu tiên trong bất kỳ tệp nguồn nào, vì nó

Bảng 31-1. tỷ lệ kèo bóng đá loại C tương đương cho SQL tích hợp

SQL tỷ lệ kèo bóng đá C tỷ lệ kèo bóng đá được xác định trong
Abstime Tuyệt đối Utils/nabstime.h
Boolean bool Postgres.h(có thể
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) INT2hoặcINT16 Postgres.h
int2Vector int2Vector* Postgres.h
Số nguyên(INT4) INT4hoặcINT32 Postgres.h
Real(float4) float4* Postgres.h
Double Precision(float8) float8* Postgres.h
Khoảng Khoảng* Utils/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
Timestamp Dấu thời gian* Utils/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ả tỷ lệ kèo bóng đá cấu trúc có thể

31.9.3.

Chúng tôi trình bày"Kiểu cũ"Gọi quy ước đầu tiên - mặc dù cách tiếp cận này bây giờ là

Đây là tỷ lệ kèo bóng đá 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 tỷ lệ kèo bóng đá chia sẻPostgreSQLvới tỷ lệ kèo bóng đá lệnh như thế này:

Tạo tỷ lệ kèo bóng đá 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,'funcs'trongASmệnh đề, sau khi đã thêmThư mụcđến đường dẫn tìm kiếm. Trong bất kỳ.sohoặc.SL.)

Lưu ý rằng chúng tôi đã chỉ định tỷ lệ kèo bóng đá 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 đơn giản để sử dụng, nhưng nó không phải làintCách này. Ngoài ra, không có cách nào đơn giản để

31.9.4.

Quy ước gọi phiên bản-1 dựa trên tỷ lệ kèo bóng đá macro để

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 tỷ lệ kèo bóng đá tệp nguồn. (Thông thường, nóNội bộ-LanguagePostgreSQLGiả sử rằng tất cả tỷ lệ kèo bóng đá chức năng nội bộ đều sử dụng phiên bản-1

Trong tỷ lệ kèo bóng đá phiên bản-1, mỗi đối số thực tế được tìm nạppg_getarg_xxx()Macro tương ứng vớipg_return_xxx()Macro cho tỷ lệ kèo bóng đá trả về.pg_getarg_xxx()lấy đối số của nópg_return_xxx()lấy như đối số của nó

Ở đây chúng tôi hiển thị tỷ lệ kèo bóng đá chức năng giống như trên, được mã hóa trong phiên bản-1

#include "Postgres.h"

TheTạo tỷ lệ kèo bóng đá năngtỷ lệ kèo bóng đá lệnh là

Thoạt nhìn, tỷ lệ kèo bóng đá 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à tỷ lệ kèo bóng đá tham chiếu qua.GetArgmacro cho tỷ lệ kèo bóng đá loại có độ dài thay đổi cho phép hiệu quả hơn"Nướng"(nén hoặc

Một cải tiến lớn về tỷ lệ kèo bóng đá chức năng phiên bản-1 tốt hơnpg_argisnull (n)Cho phép tỷ lệ kèo bóng đá chức năng kiểm tra"nghiêm ngặt".) Như vớipg_getarg_xxx()macro, đối số đầu vàopg_getarg_xxx()Cho đến khi người ta xác minh rằngpg_return_null (); Điều này hoạt động trong

tỷ lệ kèo bóng đá 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 lấy"Bên ngoài". (tỷ lệ kèo bóng đá lưu trữThay đổiTableNameCột thay đổicolnameĐặt lưu trữStoragetype. StorAgetypelà tỷ lệ kèo bóng đá trongtrơn, bên ngoài, mở rộnghoặcchính.)

Cuối cùng, tỷ lệ kèo bóng đá quy ước gọi chức năng phiên bản-1 làm cho nó​​Phần 31.9.10) vàChương) và Trình xử lý cuộc gọi bằng tỷ lệ kèo bóng đá ngữ thủ tục (Chương 45). Mã phiên bản-1 cũng nhiều hơnSRC/Backend/Utils/fmgr/readmein

31.9.5.

Trước khi chúng ta chuyển sang tỷ lệ kèo bóng đá chủ đề nâng cao hơn, chúng ta nênPostgreSQLC Hàm tỷ lệ kèo bóng đá ngữ. Trong khi nóPOSTGRESQL, this

tỷ lệ kèo bóng đá quy tắc cơ bản để viết và xây dựng tỷ lệ kèo bóng đá chức năng C là

  • Sử dụngpg_configĐể tìm ra nơiPostgreSQLtỷ lệ kèo bóng đá tệp tiêu đề máy chủ làPostgreSQL7.2. VìPostgreSQL7.1 Bạn nên sử dụng--includedir. (PG_CONFIGsẽ thoát với trạng thái không khác

  • Khi phân bổ bộ nhớ, hãy sử dụngPostgreSQLtỷ lệ kèo bóng đá năngPalloCPFREEThay vì thư viện C tương ứngmallocmiễn phí. Bộ nhớ được phân bổ bởiPalloCsẽ được giải phóng

  • Luôn luôn bằng không tỷ lệ kèo bóng đá byte của cấu trúc của bạn bằng cách sử dụngmemset. Không có điều này, nó là

  • Hầu hết tỷ lệ kèo bóng đá bên trongPOSTGRESQLtỷ lệ kèo bóng đá loại được khai báo trongPostgres.h, trong khi tỷ lệ kèo bóng đá năngpg_function_args, v.v.)fmgr.h, vì vậy bạn sẽ cần phải bao gồm tạiPostgres.h Đầu tiên, trước bất kỳPostgres.hcũng sẽ bao gồmELOG.Hpalloc.hcho bạn.

  • Tên biểu tượng được xác định trong tỷ lệ kèo bóng đá tệp đối tượng không đượcPostgreSQLMáy chủ

  • biên dịch và liên kết mã của bạn để có thểPostgreSQLLuôn yêu cầu đặc biệtPhần 31.9.6Để có lời giải thích chi tiết về cách thực hiện

31.9.6. Biên soạn

Trước khi bạn có thể sử dụngPostgreSQLtỷ lệ kèo bóng đá chức năng mở rộng được viết trongThư viện chia sẻcần phải được

Để 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 tỷ lệ kèo bóng đá sốĐóng gópThư mục. Nếu bạn dựa vào những ví dụ này, bạn sẽ làmPostgreSQLTuy nhiên, mã nguồn.

Tạo chia sẻMã độc lập vị trí(pic),Điều gì có nghĩa là về mặt khái niệm mà chúng có thể

Trong tỷ lệ kèo bóng đá ví dụ sau, chúng tôi cho rằng mã nguồn của bạn làfoo.cvà chúng tôi sẽ tạo tỷ lệ kèo bóng đáfoo.so. tỷ lệ kèo bóng đáfoo.otrừ khi có ghi chú khác. tỷ lệ kèo bóng đá thư viện được chia sẻ

BSD/OS

Cờ trình biên dịch để tạopic-FPIC.-shared.

GCC -FPIC -C FOO.C

Điều này được áp dụng kể từ phiên bản 4.0 củaBSD/OS.

FreeBSD

Cờ trình biên dịch để tạopic-FPIC.-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 cho tỷ lệ kèo bóng đá thư viện được 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.SLđể chia sẻ

IRIX

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

CC -C FOO.C
Linux

Cờ trình biên dịch để tạopic-FPIC.-FPICphải được sử dụng nếu-FPICKhông hoạt động. Tham khảo GCC-shared. MỘT

cc -fpic -c foo.c
MacOS X

Đây là một ví dụ. Nó giả định tỷ lệ kèo bóng đá công cụ nhà phát triển là

cc -c foo.c
NetBSD

Cờ trình biên dịch để tạopic-FPIC.ELFHệ thống, The-sharedISld -bsharableIS

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

GCC -FPIC -C FOO.C
Solaris

Cờ trình biên dịch để tạopic-KPICVới trình biên dịch mặt trời và-FPICvớiGCC. Để liên kết chia sẻ-gvới trình biên dịch hoặc thay thế-sharedvớiGCC.

cc -kpic -c foo.c

hoặc

GCC -FPIC -C FOO.C
TRU64 UNIX

piclà mặc định,LDvới tỷ lệ kèo bóng đá tùy chọn đặc biệt được sử dụng để thực hiện

CC -C FOO.C

Quy trình tương tự được sử dụng với GCC thay vì

Unixware

Cờ trình biên dịch để tạopic-K picVới trình biên dịch SCO và-fpicvớiGCC. Để liên kết chia sẻ-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ạngnu libtool,

Tệp thư viện chia sẻ kết quả sau đó có thể được tải vàoPostgreSQL. Khi chỉ địnhTạo tỷ lệ kèo bóng đá năngLệnh, người ta phải đặt tên cho tệp thư viện được chia sẻ,.sohoặc.SL) có thểTạo tỷ lệ kèo bóng đá nănglệnh và thông thường nên được bỏ qua

Tham khảo lạiPhầnVề nơi máy chủ mong đợi tìm được chia sẻ

31.9.7. Tòa nhà mở rộng

Nếu bạn đang nghĩ về việc phân phốiPostgreSQLMô -đun mở rộng, thiết lập APostgreSQLCài đặt cung cấp cơ sở hạ tầng xây dựng cho tỷ lệ kèo bóng đá phần mở rộng,PGXS, vì vậy đơn giảnPOSTGRESQL; nó chỉ đơn giản là tự động hóa chung

Để sử dụng cơ sở hạ tầng cho phần mở rộng của bạn, bạn phải viếtPGXSMakefile. Đây là tỷ lệ kèo bóng đá ví dụ màisbn_issnBao gồm tỷ lệ kèo bóng đá thư viện chia sẻ, SQL

Mô -đun = isbn_issn

Hai dòng cuối cùng phải luôn giống nhau. Sớm hơn tronglàmquy tắc.

tỷ lệ kèo bóng đá biến sau đây có thể được đặt:

Mô -đun

Danh sách tỷ lệ kèo bóng đá đối tượng được chia sẻ sẽ được xây dựng từ tệp nguồn

Data

Tệp ngẫu nhiên để cài đặt vàotiền tố/chia sẻ/đóng góp

data_built

Tệp ngẫu nhiên để cài đặt vàotiền tố/chia sẻ/đóng góp, mà

Docs

Tệp ngẫu nhiên để cài đặt dướitiền tố/DOC/PRINT

SCRIPTS

Tập tin tập lệnh (không phải nhị phân) để cài đặt vàotiền tố/bin

SCRIPTS_BUILT

Tập tin tập lệnh (không phải nhị phân) để cài đặt vàotiền tố/bin, cần phải có

Thủy loạn

Danh sách tỷ lệ kèo bóng đá trường hợp kiểm tra hồi quy (không có hậu tố)

hoặc nhiều nhất là tỷ lệ kèo bóng đá trong hai:

Chương trình

Một chương trình nhị phân để xây dựng (liệt kê tỷ lệ kèo bóng đá tệp đối tượng trongobjs)

module_big

Một đối tượng được chia sẻ để xây dựng (liệt kê tỷ lệ kèo bóng đá tệp đối tượng trongobjs)

phần sau cũng có thể được đặt:

Extra_Clean

tỷ lệ kèo bóng đá tệp bổ sung để xóa trongLàm

PG_CPPFLAGS

sẽ được thêm vàocppflags

PG_LIBS

sẽ được thêm vàoChương trìnhLiên kết

shlib_link

sẽ được thêm vàomodule_bigLink Line

Đặt Makefile này làMakefileinlàmđể biên dịch và sau nàyTạo cài đặtĐể cài đặt mô -đun của bạn. tỷ lệ kèo bóng đáPostgreSQLCài đặt tương ứngpg_configLệnh tìm thấy

31.9.8.

tỷ lệ kèo bóng đá loại tổng hợp không có bố cục cố định như CPostgreSQLcung cấp tỷ lệ kèo bóng đá chức năng

Giả sử chúng tôi muốn viết tỷ lệ kèo bóng đá chức năng để trả lời truy vấn

Chọn Tên, C_OverPaid (EMP, 1500)

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"

getAttributionByNamePostgreSQLtỷ lệ kèo bóng đá hệ thốngHeaptupleHeaderđược chuyển vào tỷ lệ kèo bóng đá, tênGetAttributionByNameTrả 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 null

Ngoài ra còn cóGetAttributionByNum, chọn mục tiêu

Lệnh sau tuyên bố tỷ lệ kèo bóng đác_overpaidTrong SQL:

Tạo tỷ lệ kèo bóng đá năng 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ặtsao cho

31.9.9.

Để trả lại giá trị loại hoặc loại tổng hợp từ tỷ lệ kèo bóng đá 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ểtupledescMô tả cho cấu trúc tuple. Khi làm việc với tỷ lệ kèo bóng đá mốc dữ liệu,tupledescđếnBlesstupledesc, rồi gọicho mỗi hàng. Khitupledescđếntupledescgetattinmetadata, rồi gọibuildTupleFromCstringscho mỗi

tỷ lệ kèo bóng đá số chức năng trợ giúp có sẵn để thiết lậptupledesc. Nếu bạn muốn

65476_65535

để nhậntupledesccho tỷ lệ kèo bóng đá cái tên

65660_65721

để nhậntupledescdựa trên atupledescĐối với tỷ lệ kèo bóng đá cơ sở hoặc tỷ lệ kèo bóng đá tổng hợp. KhiRecord, dự kiếntupledescphải được truyền vào bởi

tỷ lệ kèo bóng đá khi bạn cótupledesc,

66192_66239

Nếu bạn có kế hoạch làm việc với tỷ lệ kèo bóng đá mốc dữ liệu hoặc

66324_66387

Nếu bạn có kế hoạch làm việc với tỷ lệ kèo bóng đá 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 mốc dữ liệu, hãy sử dụng

66792_66867

Để xây dựng AHeaptupleNgười dùng đã cho

Khi làm việc với tỷ lệ kèo bóng đá chuỗi C, hãy sử dụng

67045_67122

Để xây dựng ANgười dùng đã chogiá trịlà tỷ lệ kèo bóng đáGiá trịMảng phải được đặt thànhnull. tỷ lệ kèo bóng đá năng này sẽ cần phải

tỷ lệ kèo bóng đá khi bạn đã xây dựng tỷ lệ kèo bóng đá tuple để trở về từ chức năng của mình, nóDatum. Sử dụng

67863_67901

Để chuyển đổi Athành aDatumcó thể được trả về

tỷ lệ kèo bóng đá ví dụ xuất hiện trong phần tiếp theo.

31.9.10. tỷ lệ kèo bóng đá bộ trở về từ ngôn ngữ C

Ngoài ra còn có API đặc biệt cung cấp hỗ trợ chofuncapi.h, như trên.

tỷ lệ kèo bóng đá hoàn trả SET (SRF) được gọi tỷ lệ kèo bóng đá lần cho mỗi mục nóSRFPhảifunccallcontextđược cung cấp để giúp kiểm soátfcinfo- flinfo- fn_extrađược sử dụng để giữ tỷ lệ kèo bóng đáfunccallcontexttrên khắp

Cấu trúc typedef

ANSRFSử dụng tỷ lệ kèo bóng đá sốfunccallcontextCấu trúc (vàfn_extra).

SRF_IS_FIRSTCALL ()

Để xác định xem tỷ lệ kèo bóng đá năng của bạn có được gọi cho lần đầu tiên

srf_firstcall_init ()

Để khởi tạofunccallcontext. Trên mọi cuộc gọi tỷ lệ kèo bóng đá năng,

srf_percall_setup ()

Để thiết lập đúng cách sử dụngfunccallcontextvà xóa bất kỳ trước đó

Nếu tỷ lệ kèo bóng đá năng 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 tỷ lệ kèo bóng đáDatum, hoặc là tỷ lệ kèo bóng đá

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 màPFREETrên mọi thứ bạnPalloC; nó sẽMulti_call_memory_ctxlà tỷ lệ kèo bóng đá vị trí phù hợpSRFđược hoàn thành đang chạy. Trong hầu hết tỷ lệ kèo bóng đá trường hợp,Multi_call_memory_ctxTrong khi làm

tỷ lệ kèo bóng đá ví dụ giả giả hoàn chỉnh trông giống như sau:

DatumKhai báo tiếp theo 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à tỷ lệ kèo bóng đá 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);

tỷ lệ kèo bóng đá ví dụ hoàn chỉnh về đơn giảnSRFTrả lại tỷ lệ kèo bóng đá loại tổng hợp trông

pg_function_info_v1 (testpassbyval);

Mã SQL để khai báo tỷ lệ kèo bóng đá năng này là:

78255_78425FileName',' testPassbyVal '

Thư mụcPRINT/TABLEFUNCin

31.9.11.

tỷ lệ kèo bóng đá hàm ngôn ngữ C có thể được tuyên bố để chấp nhận và trả lạiAnyEuityAnyArray. Nhìn thấyPhầnĐể giải thích chi tiết hơn về đa hìnhfmgr.hĐể cho phép tỷ lệ kèo bóng đá năng phiên bản-1 Cget_fn_expr_rettype (fmgrinfo *flinfo)get_fn_expr_argtype (fmgrinfo *flinfo, int. Họ trả về kết quả hoặc tỷ lệ kèo bóng đá đối số oid hoặckhông hợp lệNếu thông tin khôngflinfoISfcinfo- flinfo. Tham sốargnumlà không dựa trên.

Ví dụ: giả sử chúng ta muốn viết tỷ lệ kèo bóng đá chức năng để chấp nhận a

pg_function_info_v1 (make_array);

Lệnh sau tuyên bố tỷ lệ kèo bóng đá năngmake_arrayTrong SQL:

Tạo tỷ lệ kèo bóng đá năng Make_array (AnyEuity) trả về AnyArrayThư mục/funcs ',' make_array '

Lưu ý việc sử dụngnghiêm ngặt; Đây là