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 một trang chohiện tạiversion, or one of the other supported versions listed above instead.

kèo bóng đá việt nam13.4. Biên soạn

Các chức năng được viết trong c có thể được kèo bóng đá việt nam thành độngCREATE FUNCTIONĐối với người dùng do người dùng xác định

Lưu ý:Sau khi nó được sử dụng lần đầu tiên, a

Chuỗi chỉ định tệp đối tượng (chuỗi đầu tiên trongĐường dẫn đầy đủcủanmWill

Lưu ý: Postgressẽ không tự động kèo bóng đá việt nam chức năng; nó phải được

Hai quy ước gọi khác nhau hiện đang được sử dụng cho cpg_function_info_v1 ()Macro

13.4.1. Căn cứ

Bảng sau đây cung cấp loại c cần thiết cho các tham số...//src/phụ trợ/thư mục) màPostgres.hĐầu tiên và trong đóC.H.

Bảng 13-1. Các loại C tương đương cho tích hợpPostgresloại

Loại tích hợp C Loại được xác định trong
Abstime Tuyệt đối Utils/nabstime.h
bool bool Bao gồm/c.h
Box (hộp *) Utils/Geo-decls.h
bytea (bytea *) Bao gồm/postgres.h
"Char" char N/A
CID CID Bao gồm/postgres.h
DateTime (DateTime *) Bao gồm/c.h hoặc
INT2 INT2 hoặc INT16 Bao gồm/postgres.h
int2Vector (int2Vector *) Bao gồm/postgres.h
INT4 INT4 hoặc INT32 Bao gồm/postgres.h
float4 (float4 *) Bao gồm/c.h hoặc
float8 (float8 *) Bao gồm/c.h hoặc
LSEG (lseg *) Bao gồm/địa lý decls.h
tên (tên) Bao gồm/postgres.h
oid oid bao gồm/postgres.h
oidVector (oidvector *) Bao gồm/postgres.h
đường dẫn (đường dẫn *) Utils/Geo-decls.h
điểm (điểm *) Utils/Geo-decls.h
RegProc RegProc hoặc RegProc Bao gồm/postgres.h
Relime Relativetime Utils/nabstime.h
Text (văn bản *) Bao gồm/postgres.h
TID itempulum lưu trữ/itemptr.h
TimesPan (TimesPan *) Bao gồm/c.h hoặc
Tinterval Timeinterval Utils/nabstime.h
XID (xid *) Bao gồm/postgres.h

​​nội bộ,Postgrescoi một loại cơ sở là "Blob of Memory". Người dùng định nghĩaPostgresCó thể hoạt động trênPostgresWill

  • Pass by giá trị, độ dài cố định

  • Truyền qua tham chiếu, độ dài cố định

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

Các loại giá trị chỉ có thể có chiều dài 1, 2 hoặc 4 byte (cũng 8LongLoại nguy hiểm vì nó là 4intLoại là 4 byte trên hầu hết các UnixINT4Loại trên

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

Mặt khác, các loại có độ dài cố định có thểPostgresloại:

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

Chỉ có thể sử dụng các gợi ý cho các loại như vậy khi chuyển chúng vàoPostgreschức năng.​​palloc (), điền vàokhông bao giờSửa đổi nội dung của A

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

Typedef Struct

Rõ ràng, trường dữ liệu được hiển thị ở đây không đủ dài đểC. Khi thao túng

#include "Postgres.h"

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

13.4.2.

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 hiện là

Đây là một số ví dụ:

#include "Postgres.h"

Giả sử rằng mã trên đã được chuẩn bị trong tệpfuncs.cvà kèo bóng đá việt nam thành một chia sẻPostgresVới các lệnh như thế này:

Tạo chức năng add_one (int4) Trả về int4PGROOT/tutorial/funcs.so 'ngôn ngữ' c 'PGROOT/tutorial/funcs.so ',PGROOT/tutorial/funcs.so 'Ngôn ngữ' C 'PGROOT/tutorial/funcs.so 'ngôn ngữ' c 'PGROOT/tutorial/funcs.so 'Ngôn ngữ' C '

ở đâyPGROOTlà viết tắt củaPostgresCây nguồn. Lưu ý rằng tùy thuộc vào hệ thống của bạn, tên tệp.so, nhưng trong.SLhoặc

Lưu ý rằng chúng tôi đã chỉ định các chức năng là "nghiêm ngặt",

Mặc dù quy ước gọi này rất đơn giản, nhưng nó không phải là

13.4.3.

Quy ước gọi phiên bản-1 dựa trên các 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 một tệp nguồn (thông thường là nóYêu cầucho các chức năng được tải động.

Trong hàm 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ề.

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

#include "Postgres.h"

TheTạo chức năngCác lệnh là

Thoạt nhìn, các quy ước mã hóa phiên bản-1 có thể xuất hiệnCopyTextConcat_TextCác chức năng được hiển thị ở trên thực sự làpg_detoast_datum ()Trên của họ

Một cải tiến lớn về các chức năng phiên bản-1 tốt hơnpg_argisnull (n)Cho phép kiểm tra chức năng"nghiêm ngặt"). Như vớipg_getarg_xxx()macro, các đối số đầu vào được tính bắt đầu ở 0. ĐẾNpg_return_null (); Điều này hoạt động trong cả nghiêm ngặt và

Các quy ước gọi chức năng phiên bản-1"SET"Kết quả và thực hiệnTrong nguồn

13.4.4.

Các loại tổng hợp không có bố cục cố định như CPostgresCung cấp thủ tụcPostgresxử lý một tập hợpTuple. Giả sử chúng ta

Chọn Tên, C_OverPaid (EMP, 1500) làm trả quá nhiều tiền
Trong truy vấn ở trên, chúng ta có thể xác định C_overPaid là:
#include "Postgres.h"

GetAttributionByNamePostgresHàm hệ thống đótupletableslot*được chuyển vào chức năng, tênGetAttributionByNameTrả về giá trị mốc thời gianDatumgetxxx()Macro.

Truy vấn sau cho phépPostgresBiết vềc_overpaidchức năng:

Tạo chức năng C_overPaid (EMP, INT4)PGROOT/tutorial/obj/funcs.so '

Trong khi có nhiều cách để xây dựng các hàng mới hoặc sửa đổi

13.4.5.

Bây giờ chúng ta chuyển sang nhiệm vụ khó viết hơnC(bao gồm cảCCác chức năng để sử dụng vớiPostgres. Trong khi nó có thể làCthànhPostgres, điều này thường khó khăn (khi nóFortranPascalthường không theo cùng mộtGọi quy ướcASC. Nghĩa là, các ngôn ngữ khác không quaC.

Các quy tắc cơ bản để xây dựngCCác chức năng như sau:

  • Các tệp tiêu đề liên quan (bao gồm) được cài đặt dưới/usr/local/pgsql/bao gồmhoặcpg_configĐể tìm ra vị trí trên hệ thống của bạnPOSTGRESQLCây nguồn

  • Khi phân bổ bộ nhớ, hãy sử dụngPostgresthói quenPalloCPFREEThay vì tương ứngCThói quen thư việnmallocmiễn phí. Bộ nhớ được phân bổ bởiPalloCsẽ được giải phóng

  • Luôn luôn bằng không các byte của các cấu trúc của bạn bằng cách sử dụngMemsethoặcBzero. Một số thói quen (chẳng hạn như băm

  • Hầu hết các bên trongPostgresCác loại được khai báo trongPostgres.h, trong 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ỳ hệ thống hoặc người dùng nào khácPostgres.hcũng sẽ bao gồmC.H,ELOG.Hpalloc.hcho bạn.

  • Tên biểu tượng được xác định trong các tệp đối tượng không đượcPOSTGRESQLMáy chủ

  • kèo bóng đá việt nam và liên kết mã đối tượng của bạn để có thểPostgresLuôn yêu cầu đặc biệtPhần 13.4.6Để được giải thích chi tiết về cách làm cho bạn

13.4.6. Biên soạn

Trước khi bạn có thể sử dụngPostgreSQLchức năng mở rộng được viết trong cThư viện chia sẻNhu cầu

Để biết thêm thông tin, bạn nên đọc tài liệu củaccvà Trình chỉnh sửa liên kết,LD. Ngoài ra,POSTGRESQLMã nguồn chứa một 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 đó có nghĩa là về mặt khái niệm là họ có thể

Trong các 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 mộtfoo.so. Cácfoo.otrừ khi có ghi chú khác. Một thư viện được chia sẻ

BSD/OS

Cờ trình kèo bóng đá việt nam để 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 kèo bóng đá việt nam để tạopic-FPIC. ĐẾN-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 kèo bóng đá việt nam của trình kèo bóng đá việt nam hệ thống để tạopic+Z. Khi sử dụngGCCĐó là-FPIC. Cờ liên kết cho các 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 tiện ích mở rộng.SLĐối với các 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 kèo bóng đá việt nam để tạopic-FPIC. TRÊN-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
NetBSD

Cờ trình kèo bóng đá việt nam để tạopic-FPIC.elfHệ thống, The-sharedISld -bsharableIS

GCC -FPIC -C FOO.C
OpenBSD

Cờ trình kèo bóng đá việt nam để tạopic-FPIC.ld -bsharableđược sử dụng để liên kết

GCC -FPIC -C FOO.C
UNIX/TRU64 Digital unix

piclà mặc định, vì vậyLDvới các 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ì hệ thống
Solaris

Cờ trình kèo bóng đá việt nam để tạopic-KPICVới trình kèo bóng đá việt nam mặt trời và-FPICvớiGCC. Để liên kết chia sẻ-gvới trình kèo bóng đá việt nam hoặc thay thế-sharedvớiGCC.

cc -kpic -c foo.c
hoặc
GCC -FPIC -C FOO.C
Unixware

Cờ trình kèo bóng đá việt nam để tạopic-K picVới trình kèo bóng đá việt nam SCO và-FPICvớiGCC. Để liên kết chia sẻ-gVới trình kèo bóng đá việt nam SCO và-sharedvớiGCC.

cc -k pic -c foo.c
hoặc
GCC -FPIC -C FOO.C

Tip:Nếu bạn muốn đóng gói tiện ích mở rộng của mìnhgnu libtoolcho

Tệp thư viện chia sẻ kết quả sau đó có thể được tải vàoPostgres. Khi chỉ địnhTạo chức năngLệnh, người ta phải đặt tên cho tệp thư viện được chia sẻ.so) thay vì

Lưu ý:thực tế,PostgresKhông quan tâm những gì bạn đặt tên

Đường dẫn được đưa đếnTạo chức nănglệnh phải là đường dẫn tuyệt đối (tức là, bắt đầu với/) đề cập đến các thư mục có thể nhìn thấy trênPostgresMáy chủ đang chạy. Đường dẫn tương đối làm trong thực tế công việc, nhưng làPostgresMáy chủTạo chức nănglệnh và có thể"Postgres"Người dùng là phổ biến