Phiên bản được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / 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 tỷ lệ kèo bóng đá 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ạiPhiên bản hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

33.7. tỷ lệ kèo bóng đá

PostgreSQLCung cấp tỷ lệ kèo bóng đá để gửi các cuộc gọi chức năng đơn giản đến máy chủ.

TIP

Giao tỷ lệ kèo bóng đá này có phần lỗi thời, vì người ta có thể đạt được hiệu suất tương tự và chức năng lớn hơn bằng cách thiết lập một câu lệnh đã chuẩn bị để xác định cuộc gọi chức năng. Sau đó, thực hiện câu lệnh bằng truyền nhị phân của các tham số và kết quả thay thế cho một cuộc gọi hàm đường nhanh.

hàmPQFNYêu cầu thực hiện chức năng máy chủ thông qua tỷ lệ kèo bóng đá dẫn nhanh:

pgresult *pqfn (pgconn *Conn,
               int fnid,
               int *result_buf,
               int *result_len,
               int result_is_int,
               const pqargblock *args,
               int nargs);

Cấu trúc typedef

    int len;
    int isint;
    Liên minh

        int *ptr;
        Int Integer;
     u;
 Pqargblock;

ThefnidĐối số là oid của hàm được thực thi.argsNARGSXác định các tham số sẽ được truyền đến hàm; Họ phải khớp với danh sách đối số chức năng được khai báo. KhiisintTrường của cấu trúc tham số là đúng,U.IntegerGiá trị được gửi đến máy chủ dưới dạng số nguyên của độ dài được chỉ định (đây phải là 2 hoặc 4 byte); Hoán đổi byte thích hợp xảy ra. Khiisintlà sai, số byte được chỉ định tại*U.Ptrđược gửi không có xử lý; Dữ tỷ lệ kèo bóng đá phải ở định dạng mà máy chủ dự kiến ​​để truyền nhị phân của kiểu dữ tỷ lệ kèo bóng đá đối số của hàm. (Tuyên bố củaU.PTRlà loạiint *là lịch sử; Sẽ tốt hơn nếu xem xét nóvoid *.)result_bufchỉ vào bộ đệm để đặt giá trị trả về của hàm. Người gọi phải phân bổ đủ không gian để lưu trữ giá trị trả về. (Không có kiểm tra!) Độ dài kết quả thực tế trong byte sẽ được trả về trong số nguyên được trỏ bởiresult_len. Nếu dự kiến ​​kết quả số nguyên 2 hoặc 4 byte, hãy đặtresult_is_intthành 1, nếu không sẽ đặt nó thành 0. Cài đặtresult_is_intđến 1 Nguyên nhânlibpqĐể hoán đổi giá trị nếu cần thiết, để nó được phân phối dưới dạng thích hợpintGiá trị cho máy khách; Lưu ý rằng một số nguyên 4 byte được chuyển vào*result_bufĐối với kích thước kết quả được phép. Khiresult_is_intlà 0, chuỗi byte định dạng nhị phân được gửi bởi máy chủ được trả về không sửa đổi. (Trong trường hợp này tốt hơn là nên xem xétresult_buflà loạivoid *.)

PQFNLuôn trả về hợp lệpgresultCon trỏ, có trạng tháiPGRES_COMMAND_OKĐể thành công hoặcPGRES_FATAL_ERRORNếu gặp một số vấn đề. Trạng thái kết quả nên được kiểm tra trước khi kết quả được sử dụng. Người gọi chịu trách nhiệm giải phóngpgresultvớiPQClearKhi nó không còn cần thiết nữa.

Để chuyển đối số null cho hàm, đặtlenTrường của cấu trúc tham số đó thành-1; TheisintuCác trường sau đó không liên quan. (Nhưng điều này chỉ hoạt động trong các kết nối tỷ lệ kèo bóng đá thức 3.0 trở lên.)

Nếu hàm trả về null,*result_lenđược đặt thành-1*result_bufkhông được sửa đổi. (Điều này chỉ hoạt động trong tỷ lệ kèo bóng đá thức 3.0 và các kết nối sau; trong tỷ lệ kèo bóng đá thức 2.0, không*result_lencũng không*result_bufđược sửa đổi.)

Lưu ý rằng không thể xử lý các kết quả có giá trị được đặt khi sử dụng giao tỷ lệ kèo bóng đá này. Ngoài ra, hàm phải là hàm đơn giản, không phải là hàm tổng hợp hoặc cửa sổ.