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

32.9. soi kèo bóng đá truoctran ngữ c

soi kèo bóng đá truoctran 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à"csoi kèo bóng đá truoctran chức năng từ"Nội bộ"soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran năng,"Phiên bản 0") Hàm. soi kèo bóng đá truoctran ngữTạo soi kèo bóng đá truoctran năngCTrong cả hai trường hợp. soi kèo bóng đá truoctran chức năng kiểu cũ

32.9.1. Tải động

Lần đầu tiên chức năng do người dùng định nghĩa trong soi kèo bóng đá truoctran cụ thểTạo soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran đườ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à soi kèo bóng đá truoctran sai lầm phổ biến.

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

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

Sau khi nó được sử dụng lần đầu tiên,loadlệnh hoặc

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

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

32.9.2. soi kèo bóng đá truoctran loại cơ sở bằng tiếng c

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

soi kèo bóng đá truoctran loại cơ sở có thể có một trong ba định dạng nội bộ:

  • Truyền theo 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

soi kèo bóng đá truoctran 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ênLongLoại nguy hiểmintLoại là 4 byte trên hầu hết soi kèo bóng đá truoctran UnixINT4Loại trên máy Unix có thể là:

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

Mặt khác, soi kèo bóng đá truoctran loại có độ dài cố định có thểPostgreSQLloại:

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

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

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

Cảnh báo

không bao giờSửa đổi nội dung của giá trị đầu vào ngang qua.Phần.

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à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 soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran

#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 32-1Chỉ định loại c tương ứng với loại SQL khiPostgreSQL. The"Được xác định soi kèo bóng đá truoctran"Cột đưa ra tệp tiêu đề màPostgres.hĐầu tiên soi kèo bóng đá truoctran bất kỳ tệp nguồn nào, vì nó

Bảng 32-1. soi kèo bóng đá truoctran loại C tương đương cho SQL tích hợp

SQL Loại C Loại được xác định soi kèo bóng đá truoctran
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)
ký 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
dấu thời gian dấu thời gian* Utils/Timestamp.h
Tinterval Timeinterval Utils/nabstime.h
Varchar Varchar* Postgres.h
XID TranstercentID Postgres.h

Bây giờ chúng tôi đã vượt qua tất cả soi kèo bóng đá truoctran cấu trúc có thể

32.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à soi kèo bóng đá truoctran số ví dụ:

#include "Postgres.h"

Giả sử rằng mã trên đã được chuẩn bị soi kèo bóng đá truoctran tệpfuncs.cvà biên dịch thành soi kèo bóng đá truoctran chia sẻPostgreSQLVới soi kèo bóng đá truoctran lệnh như thế này:

Tạo soi kèo bóng đá truoctran 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ụcPhía trênPostgreSQLThư mục hướng dẫn,'funcs'soi kèo bóng đá truoctranASmệnh đề, sau khi đã thêmThư mụcđến đường dẫn tìm kiếm. soi kèo bóng đá truoctran bất kỳ.sohoặc.SL.)

Lưu ý rằng chúng tôi đã chỉ định soi kèo bóng đá truoctran chức năng là"nghiêm ngặt", 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ông phảiintCách này. Ngoài ra, không có cách nào đơn giản để

32.9.4.

Quy ước gọi phiên bản-1 dựa trên soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran tệp nguồn. (Thông thường, nóNội bộ-LanguagePOSTGRESQLGiả sử rằng tất cả soi kèo bóng đá truoctran chức năng nội bộ đều sử dụng phiên bản-1

Trong soi kèo bóng đá truoctran 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 loại trả về.pg_getarg_xxx()lấy đối số của nópg_return_xxx()lấy đối số của nó

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

#include "Postgres.h"

TheTạo soi kèo bóng đá truoctran năngsoi kèo bóng đá truoctran lệnh là

Thoạt nhìn, soi kèo bóng đá truoctran 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.GetArgMacro cho soi kèo bóng đá truoctran 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ề soi kèo bóng đá truoctran chức năng phiên bản-1 tốt hơnpg_argisnull (n)Cho phép soi kèo bóng đá truoctran chức năng kiểm tra"nghiêm ngặt".) Như vớipg_getarg_xxx()macro, soi kèo bóng đá truoctran đố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 soi kèo bóng đá truoctran

soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran 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". (Loại lưu trữThay đổiTableNameCột thay đổicolnameĐặt lưu trữStorAgetype. Storagetypelà soi kèo bóng đá truoctran trongPlain, bên ngoài, mở rộnghoặcchính.)

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

32.9.5.

Trước khi chúng ta chuyển sang soi kèo bóng đá truoctran chủ đề nâng cao hơn, chúng ta nênPOSTGRESQLC Hàm soi kèo bóng đá truoctran ngữ C. Trong khi nóPostgreSQL, this

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

  • Sử dụngpg_configĐể tìm ra nơiPOSTGRESQLsoi kèo bóng đá truoctran 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ụngPostgreSQLsoi kèo bóng đá truoctran 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 không soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran bên trongPOSTGRESQLsoi kèo bóng đá truoctran loại được khai báo trongPostgres.h, soi kèo bóng đá truoctran khi chức 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ỳ ai khácPostgres.hcũng sẽ bao gồmELOG.Hpalloc.hcho bạn.

  • Tên biểu tượng được xác định trong soi kèo bóng đá truoctran 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 32.9.6Để có lời giải thích chi tiết về cách thực hiện

32.9.6. Biên soạn

Trước khi bạn có thể sử dụngPostgreSQLsoi kèo bóng đá truoctran 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ó soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran 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 thư viện chia sẻ thường tương tự như liên kếtMã độc lập vị trí(pic),Điều gì có nghĩa là chúng có thể được đặt tại soi kèo bóng đá truoctran

Trong soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctranfoo.so. soi kèo bóng đá truoctranfoo.otrừ khi có ghi chú khác. soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran năngLệnh và thông thường nên được bỏ qua để tốt nhất

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

32.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 soi kèo bóng đá truoctran 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à soi kèo bóng đá truoctran ví dụ màisbn_issnBao gồm soi kèo bóng đá truoctran thư viện được 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 soi kèo bóng đá truoctranlàmQuy tắc.

soi kèo bóng đá truoctran biến sau có thể được đặt:

Mô -đun

Danh sách soi kèo bóng đá truoctran đố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/đóng góp

Script

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 soi kèo bóng đá truoctran trường hợp kiểm tra hồi quy (không có hậu tố)

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

Chương trình

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

module_big

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

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

Extra_Clean

soi kèo bóng đá truoctran 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. soi kèo bóng đá truoctranPostgreSQLCài đặt tương ứngpg_configLệnh tìm thấy

32.9.8.

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

Giả sử chúng ta muốn viết soi kèo bóng đá truoctran 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"

soi kèo bóng đá truoctran mã hóa phiên bản-1, ở trên sẽ trông như thế này:

#include "Postgres.h"

GetAttributionByNamePostgreSQLsoi kèo bóng đá truoctran hệ thốngHeaptupleHeaderđược chuyển vào soi kèo bóng đá truoctran nă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ố soi kèo bóng đá truoctranc_overpaidsoi kèo bóng đá truoctran SQL:

Tạo soi kèo bóng đá truoctran 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

32.9.9.

Để trả lại giá trị loại hoặc loại tổng hợp từ soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran mốc dữ liệu,tupledescđếnBlesstupledesc, rồi gọiheap_form_tuplecho mỗi hàng.tupledescđếntupledescgetattinmetadata, rồi gọibuildTupleFromCStringscho mỗi

soi kèo bóng đá truoctran số chức năng trợ giúp có sẵn để thiết lậptupledesc. Được đề xuất

66081_66261

Vượt qua cùng soi kèo bóng đá truoctranfcinfoCấu trúcresultTypeIDcó thể được chỉ định lànullhoặc là địa chỉ của biến cục bộ đểresulttupledescnên là địa chỉ của soi kèo bóng đá truoctran địa phươngtupledescBiến. Kiểm tra xemTypeFunc_Composite; Nếu vậy,resulttupledescđã được lấp đầy bằngtupledesc. (Nếu nó là"Hồ sơ trả về chức năng được gọi soi kèo bóng đá truoctran ngữ cảnh rằng.)

Tip: GET_CALL_RESULT_TYPECó thể giải quyếtresultTypeIDđầu ra chủ yếu hữu ích cho

Lưu ý: GET_CALL_RESULT_TYPECó anh chị emGET_EXPR_RESULT_TYPE, màget_func_result_type, có thể được sử dụngRecordget_func_result_typeKhông thể giải quyếtget_call_result_type.

tupledescS là

68742_68801

để nhậntupledesccho hàng

68943_69004

để nhậntupledescDựa trên atupledescĐối với loại cơ sở hoặc loại tổng hợp. NóRecordTuy nhiên, và nó không thể giải quyết

soi kèo bóng đá truoctran khi bạn cótupledesc,,

69444_69491

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

69576_69639

Nếu bạn có kế hoạch làm việc với soi kèo bóng đá truoctran chuỗi C. Nếu bạn đang viết mộtfunccallcontextCấu trúc - Sử dụngTUPE_DESChoặcAttinMetatrường tương ứng.

Khi làm việc với mốc dữ liệu, sử dụng

70044_70121

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

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

70299_70376

Để xây dựng AHeaptupleNgười dùng đã choGiá trịlà soi kèo bóng đá truoctranGiá trịMảng phải được đặt thànhnull. soi kèo bóng đá truoctran năng này sẽ cần phải

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

71117_71155

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

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

32.9.10. soi kèo bóng đá truoctran 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.

soi kèo bóng đá truoctran hoàn trả SET (SRF) được gọi soi kèo bóng đá truoctran 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ữ soi kèo bóng đá truoctranfunccallcontextBên kia

Cấu trúc typedef

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

srf_is_firstcall ()

Để xác định xem soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran năng,

srf_percall_setup ()

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

Nếu soi kèo bóng đá truoctran 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 loạiDatum, hoặc là soi kèo bóng đá truoctran

srf_return_done (funcctx)

Để làm sạch 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ạn​​PalloC; nó sẽMulti_call_memory_ctxlà soi kèo bóng đá truoctran vị trí phù hợpSRFđược hoàn thành chạy. Trong hầu hết soi kèo bóng đá truoctran trường hợp,multi_call_memory_ctxsoi kèo bóng đá truoctran khi làm

soi kèo bóng đá truoctran ví dụ Pseudo-Code 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à soi kèo bóng đá truoctran cách chúng tôi có thể kiểm tra xem chúng tôi đã 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);

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

pg_function_info_v1 (retcposite);

soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran tham số:

Tạo hoặc thay thế chức năng retcposite (tính bằng số nguyên, soi kèo bóng đá truoctran số nguyên,FileName',' retcposite '

Lưu ý rằng trong phương pháp này, loại đầu ra của soi kèo bóng đá truoctranRecord​​Loại.

Thư mục82539_82558in

32.9.11.

soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran 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 loại đố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.GET_CALL_RESULT_TYPEcũng có thể được sử dụng như soi kèo bóng đá truoctranget_fn_expr_rettype.

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

pg_function_info_v1 (make_array);

Lệnh sau tuyên bố soi kèo bóng đá truoctranmake_arraysoi kèo bóng đá truoctran SQL:

Tạo soi kèo bóng đá truoctran 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à