Postgresql 9.1.24 Tài liệu | ||||
---|---|---|---|---|
prev | UP | Chương 31.libpq- C Thư viện | Tiếp theo |
ThePQEXEC
11174_11347
PQEXEC
11412_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ì.)
PQEXEC
chỉ 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ừ:PQSendQuery
vàPQGetResult
. Cũng cóPQSendQueryParams
, PQSendPrepare
, PQSendQueryPrepared
, và
, có thể được sử dụng với
PQGetResult
để nhân đôi
chức năng củaPQExecparams
,
PQPrepare
, PQEXECPREPARED
, và
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ọiPQGetResult
Một hoặc nhiều lần để có được
kết quả.PQSendQuery
14021_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ớiPQSendQuery
Ngoạ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ọi
PQGetResult
Để 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_19779
hoặcPQSendQueryPrepared
Gọ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);
PQGetResult
phả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,PQGetResult
Sẽ 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ừPQGetResult
nên được
được xử lý bằng cùng mộtpgresult20524_20629PQClear
Khi được thực hiện với nó.
Lưu ý rằngPQGetResult
Will
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ả khi
PQResultstatus
cho biết một người gây tử vong lỗi,PQGetResult
nê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ụngPQSendQuery
vàPQGetResult
giải quyết một trongPQEXEC
21560_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ọiPQGetResult
vẫ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);
PQConsumeInput
Thô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ợppqerrormessage
có 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 trapqisbusy
và/hoặcpqnotifyes
Để xem nhà nước của họ có
đã thay đổi.
PQConsumeInput
có 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àPQGetResult
sẽ chặn chờ đợi
đầu vào. Trả về 0 chỉ ra rằngPQGetResult
Có thể được gọi với sự đảm bảo
soi kèo bóng đá truoctran chặn.
int pqisbusy (pgconn *Conn);
pqisbusy
sẽ soi kèo bóng đá truoctran chính nó
cố gắng đọc dữ liệu từ máy chủ; Vì vậyPQConsumeInput
Phả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
quaPQGetResult
nếupqisbusy
Trả 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
/PQGetResult
cũ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ủaPQCANCEL
25718_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
, pqputnbytes
vàPQENDCOPY
sẽ 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_27477
soi 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ọiPQFLUSH
Một lần nữa. Nếu như
nó trở nên sẵn sàng đọc, gọiPQConsumeInput
, sau đó gọiPQFLUSH
Một lần nữa. Lặp lại cho đến khiPQFLUSH
Trả 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ầnPQFLUSH
Trả về 0, đợi ổ cắm được
Đọc sẵn sàng và sau đó đọc phản hồi như mô tả ở trên.