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
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ể
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à
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ệnCopyTextvàConcat_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
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ềnTrong truy vấn ở trên, chúng ta có thể xác định C_overPaid là:
#include "Postgres.h"
GetAttributionByNamelàPostgresHà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
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óFortranvàPascalthườ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 quenPalloCvàPFREEThay vì tương ứngCThói quen thư việnmallocvàmiễ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.Hvàpalloc.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
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ẻ
Cờ trình kèo bóng đá việt nam để tạopiclà-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.
Cờ trình kèo bóng đá việt nam để tạopiclà-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.
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ạopiclà+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.Choặc
gcc -fpic -c foo.cvà sau đó
ld -b -o foo.sl foo.oHP-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
piclà mặc định, không-shared.
CC -C FOO.C
Cờ trình kèo bóng đá việt nam để tạopiclà-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
Cờ trình kèo bóng đá việt nam để tạopiclà-FPIC.elfHệ thống, The-sharedISld -bsharableIS
GCC -FPIC -C FOO.C
Cờ trình kèo bóng đá việt nam để tạopiclà-FPIC.ld -bsharableđược sử dụng để liên kết
GCC -FPIC -C FOO.C
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.CQuy trình tương tự được sử dụng với GCC thay vì hệ thống
Cờ trình kèo bóng đá việt nam để tạopiclà-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.choặc
GCC -FPIC -C FOO.C
Cờ trình kèo bóng đá việt nam để tạopiclà-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.choặ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