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

31.4. Xử lý lệnh soi kèo bóng đá truoctran bộ

ThePQEXEC11174_11347

  • PQEXEC11412_11618

  • Vì việc thực hiện ứng dụng máy khách bị đình chỉ Trong khi nó chờ kết quả, rất khó cho ứng dụng để quyết định rằng họ muốn cố gắng hủy bỏ yêu cầu. (Nó có thể được thực hiện từ một trình xử lý tín hiệu, nhưng soi kèo bóng đá truoctran nếu soi kèo bóng đá truoctran thì.)

  • PQEXECchỉ có thể trả về mộtpgresultCấu trúc. Nếu Chuỗi soi kèo bóng đá truoctran đã gửi chứa nhiềuSQLCác soi kèo bóng đá truoctran, tất cả trừ cuối cùngpgresultbị loại bỏ bởiPQEXEC.

12328_12426PQEXECđược xây dựng từ:PQSendQueryPQGetResult. Cũng cóPQSendQueryParams, PQSendPrepare, PQSendQueryPrepared, , có thể được sử dụng vớiPQGetResultđể nhân đôi chức năng củaPQExecparams, PQPrepare, PQEXECPREPARED, tương ứng.

PQSendQuery

gửi lệnh lên máy chủ mà soi kèo bóng đá truoctran cần chờ kết quả). 1 được trả về nếu lệnh đã thành công được gửi và 0 nếu soi kèo bóng đá truoctran (trong trường hợp đó, sử dụngpqerrormessageĐể biết thêm thông tin về sự thất bại).

13724_13779

Sau khi gọi thành côngPQSendQuery, gọiPQGetResultMột hoặc nhiều lần để có được kết quả.PQSendQuery14021_14094PQGetResultđã trả lại a con trỏ null, cho biết soi kèo bóng đá truoctran đã hoàn thành.

PQSendQueryParams

Đệ trình lệnh và riêng biệt các tham số cho máy chủ mà soi kèo bóng đá truoctran chờ đợi kết quả.

int pqsendqueryparams (pgconn *Conn,
                      soi kèo bóng đá truoctran const char *,
                      int nparams,
                      const oid *paramtypes,
                      const char * const * paramValues,
                      const int *paramlengths,
                      const int *paramformats,
                      int resultformat);

Điều này tương đương vớiPQSendQueryNgoại trừ các tham số truy vấn có thể được chỉ định riêng biệt với chuỗi truy vấn. Các Các tham số của chức năng được xử lý giống hệt vớiPQExecParams. GiốngPQExecParams, nó sẽ soi kèo bóng đá truoctran làm việc trên các kết nối 2.0 giao thức và nó chỉ cho phép một lệnh trong chuỗi truy vấn.

PQSendPrepare

Gửi yêu cầu tạo câu lệnh đã chuẩn bị với Các tham số đã cho, mà soi kèo bóng đá truoctran chờ hoàn thành.

int PQSendPrepare (PGConn *Conn,
                  const char *stmtname,
                  const char *truy vấn,
                  int nparams,
                  const oid *paramtypes);

Đây là phiên bản soi kèo bóng đá truoctran bộ củaPQPrepare: nó trả về 1 nếu nó có thể gửi yêu cầu và 0 nếu soi kèo bóng đá truoctran. Sau khi thành công Gọi, gọiPQGetResultđến xác định xem máy chủ đã tạo thành công Tuyên bố chuẩn bị. Các tham số của chức năng được xử lý Diễn vớiPQPrepare. GiốngPQPrepare, nó sẽ soi kèo bóng đá truoctran làm việc trên các kết nối 2.0 giao thức.

PQSendQueryPrepared

Gửi yêu cầu thực hiện một câu lệnh đã chuẩn bị với Các tham số đã cho, mà soi kèo bóng đá truoctran chờ đợi (các) kết quả.

int pqsendqueryprepared (PGConn *Conn,
                        const char *stmtname,
                        int nparams,
                        const char * const * paramValues,
                        const int *paramlengths,
                        const int *paramformats,
                        int resultformat);

Điều này tương tựPQSendQueryParams, nhưng soi kèo bóng đá truoctran sẽ được được thực thi được chỉ định bằng cách đặt tên một tuyên bố, thay vì đưa ra một chuỗi truy vấn. Chức năng của Các tham số được xử lý giống hệt vớiPQEXECPREPARED. GiốngPQEXECPREPARED, nó sẽ soi kèo bóng đá truoctran hoạt động Kết nối 2.0-giao thức.

Đệ trình yêu cầu lấy thông tin về tuyên bố đã chuẩn bị được chỉ định, mà soi kèo bóng đá truoctran phải chờ đợi hoàn thành.

17886_17953

Đây là phiên bản soi kèo bóng đá truoctran bộ của: nó trả về 1 nếu nó đã có thể gửi yêu cầu và 0 nếu soi kèo bóng đá truoctran. Sau a cuộc gọi thành công, gọiPQGetResultĐể có được kết quả. Các Các tham số của chức năng được xử lý giống hệt với. Giống, nó sẽ soi kèo bóng đá truoctran hoạt động trên các kết nối 2.0 giao thức.

gửi yêu cầu lấy thông tin về cổng thông tin được chỉ định, mà soi kèo bóng đá truoctran chờ hoàn thành.

18822_18889

Đây là phiên bản soi kèo bóng đá truoctran bộ củaPQDescriptePortal: nó trả về 1 nếu nó là có thể gửi yêu cầu và 0 nếu soi kèo bóng đá truoctran. Sau a cuộc gọi thành công, gọiPQGetResultĐể có được kết quả. Các Các tham số của chức năng được xử lý giống hệt vớiPQDescriptePortal. GiốngPQDescriptePortal, nó sẽ soi kèo bóng đá truoctran làm việc trên các kết nối 2.0 giao thức.

PQGetResult

Chờ kết quả tiếp theo từ trướcPQSendQuery, PQSendQueryParams, 19764_19779hoặcPQSendQueryPreparedGọi và trả lại nó. Một con trỏ null được trả về khi lệnh hoàn tất và Sẽ soi kèo bóng đá truoctran có kết quả nữa.

pgresult *pQGetResult (pgconn *Conn);

PQGetResultphải được gọi liên tục cho đến khi nó trả lại một con trỏ null, chỉ ra rằng lệnh được thực hiện. (Nếu được gọi khi soi kèo bóng đá truoctran có lệnh nào hoạt động,PQGetResultSẽ chỉ trở lại một con trỏ null cùng một lúc.) Mỗi ​​kết quả soi kèo bóng đá truoctran null từPQGetResultnên được được xử lý bằng cùng mộtpgresult20524_20629PQClearKhi được thực hiện với nó. Lưu ý rằngPQGetResultWill Chỉ chặn nếu một soi kèo bóng đá truoctran đang hoạt động và cần thiết Dữ liệu phản hồi chưa được đọc bởiPQConsumeInput.

Lưu ý:ngay cả khiPQResultstatuscho biết một người gây tử vong lỗi,PQGetResultnên được gọi cho đến khi nó trả về một con trỏ null để cho phéplibpqĐể xử lý hoàn toàn thông tin lỗi.

Sử dụngPQSendQueryPQGetResultgiải quyết một trongPQEXEC21560_21615SQLCác soi kèo bóng đá truoctran, kết quả của các soi kèo bóng đá truoctran đó có thể được lấy cá nhân. (Điều này cho phép một dạng đơn giản của chồng chéo Xử lý, nhân tiện: Khách hàng có thể xử lý kết quả của một soi kèo bóng đá truoctran trong khi máy chủ vẫn đang hoạt động trên các truy vấn sau cùng một chuỗi soi kèo bóng đá truoctran.) Tuy nhiên, gọiPQGetResultvẫn sẽ khiến máy khách chặn cho đến khi máy chủ hoàn thành tiếp theoSQLsoi kèo bóng đá truoctran. Điều này có thể tránh được bằng cách thích hợp Sử dụng thêm hai chức năng:

PQConsumeInput

Nếu đầu vào có sẵn từ máy chủ, hãy tiêu thụ nó.

int pqconsumeinput (pgconn *Conn);

PQConsumeInputThông thường trả về 1 chỉ ra"soi kèo bóng đá truoctran có lỗi",, nhưng trả về 0 nếu có một loại rắc rối nào đó (trong đó trường hợppqerrormessagecó thể được tư vấn). Lưu ý rằng kết quả soi kèo bóng đá truoctran cho biết liệu có Dữ liệu đầu vào thực sự được thu thập. Sau khi gọiPQConsumeInput, The Ứng dụng có thể kiểm trapqisbusyvà/hoặcpqnotifyesĐể xem nhà nước của họ có đã thay đổi.

PQConsumeInputcó thể được gọi ngay cả khi ứng dụng soi kèo bóng đá truoctran được chuẩn bị để giải quyết một kết quả hoặc thông báo chỉ là chưa. Chức năng sẽ đọc Dữ liệu có sẵn và lưu nó trong bộ đệm, do đó gây raselect ()23444_23526PQConsumeInputĐể xóaselect ()Điều kiện ngay lập tức, và sau đó kiểm tra kết quả lúc rảnh rỗi.

pqisbusy

Trả về 1 nếu một soi kèo bóng đá truoctran bận, nghĩa làPQGetResultsẽ chặn chờ đợi đầu vào. Trả về 0 chỉ ra rằngPQGetResultCó thể được gọi với sự đảm bảo soi kèo bóng đá truoctran chặn.

int pqisbusy (pgconn *Conn);

pqisbusysẽ soi kèo bóng đá truoctran chính nó cố gắng đọc dữ liệu từ máy chủ; Vì vậyPQConsumeInputPhải được viện dẫn trước, hoặc trạng thái bận rộn sẽ soi kèo bóng đá truoctran bao giờ kết thúc.

Một ứng dụng điển hình sử dụng các chức năng này sẽ có chính Vòng lặp sử dụngselect ()hoặcpoll ()Để chờ tất cả điều kiện mà nó phải đáp ứng. Một trong những điều kiện sẽ là đầu vào có sẵn từ máy chủ, theo điều khoảnselect ()có nghĩa là dữ liệu có thể đọc được trên tệp mô tả được xác định bởiPQSocket. Khi vòng chính phát hiện đầu vào sẵn sàng, nó sẽ gọiPQConsumeInputĐể đọc đầu vào. Sau đó nó có thể gọiPQISBusy, theo sau quaPQGetResultnếupqisbusyTrả về false (0). Nó cũng có thể gọipqnotifyĐể phát hiệnThông báoTin nhắn (xemPhần 31.7).

Một máy khách sử dụngPQSendQuery/PQGetResultcũng có thể cố gắng hủy một soi kèo bóng đá truoctran vẫn đang được máy chủ xử lý; nhìn thấyPhần 31.5. Nhưng bất kể Giá trị trả về củaPQCANCEL25718_25802PQGetResult. Một thành công Hủy bỏ chỉ đơn giản là khiến soi kèo bóng đá truoctran chấm dứt sớm hơn hơn nó sẽ có.

Bằng cách sử dụng các chức năng được mô tả ở trên, có thể Tránh chặn trong khi chờ đợi đầu vào từ máy chủ cơ sở dữ liệu. Tuy nhiên, vẫn có thể là ứng dụng sẽ chặn Đang chờ gửi đầu ra đến máy chủ. Điều này tương đối hiếm nhưng có thể xảy ra nếu các soi kèo bóng đá truoctran SQL hoặc giá trị dữ liệu rất dài được gửi. (Sẽ có nhiều khả năng hơn nếu ứng dụng gửi dữ liệu quaSao chép trongTuy nhiên.) Để ngăn chặn điều này khả năng và đạt được cơ sở dữ liệu hoàn toàn soi kèo bóng đá truoctran chặn hoạt động, các chức năng bổ sung sau đây có thể được sử dụng.

pqsetNonblocking

Đặt trạng thái soi kèo bóng đá truoctran chặn của kết nối.

int pqsetNonblocking (pgconn *Conn, int arg);

Đặt trạng thái của kết nối thành soi kèo bóng đá truoctran chặn nếuarglà 1 hoặc chặn nếuarglà 0. Trả về 0 nếu ok, -1 nếu lỗi.

Ở trạng thái soi kèo bóng đá truoctran chặn, các cuộc gọi đếnPQSendQuery, pqputline, pqputnbytesPQENDCOPYsẽ soi kèo bóng đá truoctran chặn mà thay vào đó trả lại lỗi nếu chúng cần được gọi lại.

Lưu ý rằng27469_27477soi kèo bóng đá truoctran Danh dự chế độ soi kèo bóng đá truoctran chặn; Nếu nó được gọi, nó sẽ hành động trong chặn thời trang dù sao.

pqisnonblocking

Trả về trạng thái chặn của cơ sở dữ liệu sự liên quan.

int pqisnonblockocking (const pgconn *Conn);

Trả về 1 nếu kết nối được đặt thành chế độ soi kèo bóng đá truoctran chặn và 0 nếu chặn.

PQFLUSH

cố gắng xóa bất kỳ dữ liệu đầu ra được xếp hàng nào vào máy chủ. Trả về 0 nếu thành công (hoặc nếu hàng đợi gửi trống), -1 Nếu nó thất bại vì một số lý do, hoặc 1 nếu nó soi kèo bóng đá truoctran thể gửi Tất cả dữ liệu trong hàng đợi gửi (trường hợp này chỉ có thể xảy ra nếu kết nối soi kèo bóng đá truoctran chặn).

int pqflush (pgconn *Conn);

Sau khi gửi bất kỳ lệnh hoặc dữ liệu nào trên kết nối soi kèo bóng đá truoctran chặn, gọiPQFLUSH. Nếu nó trở lại 1, hãy đợi Để ổ cắm trở nên sẵn sàng đọc hoặc viết. Nếu nó trở thành Writing-Ready, GọiPQFLUSHMột lần nữa. Nếu như nó trở nên sẵn sàng đọc, gọiPQConsumeInput, sau đó gọiPQFLUSHMột lần nữa. Lặp lại cho đến khiPQFLUSHTrả về 0. (Cần kiểm tra Để đọc sẵn sàng và thoát đầu vào với29130_29146, vì máy chủ có thể chặn Cố gắng gửi cho chúng tôi dữ liệu, ví dụ: Thông báo thông báo và sẽ soi kèo bóng đá truoctran đọc dữ liệu cho đến khi chúng tôi đọc nó.) một lầnPQFLUSHTrả về 0, đợi ổ cắm được Đọc sẵn sàng và sau đó đọc phản hồi như mô tả ở trên.