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

1.4. kèo bóng đá hom nay bộ

ThePQEXECHàm là đủ Để gửi các lệnh trong các ứng dụng đồng bộ đơn giản. Nó Tuy nhiên, có một vài thiếu sót lớn:

  • PQEXECChờ lệnh được hoàn thành. Ứng dụng có thể có công việc khác để làm (chẳng hạn như duy trì giao diện người dùng), trong trường hợp đó sẽ kèo bóng đá hom nay muốn chặn chờ phản hồi.

  • Vì điều khiển được chôn bên trongPQEXEC, rất khó để frontend Quyết định nó muốn cố gắng hủy lệnh liên tục. (Nó có thể được thực hiện từ một trình xử lý tín hiệu, nhưng kèo bóng đá hom nay nếu kèo bóng đá hom nay thì.)

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

Các ứng dụng kèo bóng đá hom nay thích những hạn chế này có thể sử dụng các chức năng cơ bản màPQEXECđược xây dựng từ:PQSendQueryPQGetResult.

Các chương trình cũ hơn đã sử dụng chức năng này cũng nhưpqputlinepqputnbytesCó thể chặn chờ để gửi dữ liệu đến phụ trợ. Để giải quyết kèo bóng đá hom nay đề đó, chức năngpqsetNonblockingđã được thêm vào.

Các ứng dụng cũ có thể bỏ qua việc sử dụngpqsetNonblockingvà có được những người già có khả năng chặn hành vi. Các chương trình mới hơn có thể sử dụngpqsetNonblockingĐể đạt được hoàn toàn kết nối kèo bóng đá hom nay chặn đến phụ trợ.

  • pqsetNonblockingĐặt Trạng thái kèo bóng đá hom nay chặn của kết nối.

    int pqsetNonblocking (pgconn *Conn, int arg)

    Đặt trạng thái kết nối thành kèo bóng đá hom nay chặn nếuarglà 1, chặn nếuarglà 0. Trả về 0 nếu ok, -1 Nếu lỗi.

    Ở trạng thái kèo bóng đá hom nay chặn, các cuộc gọi đếnpqputline, pqputnbytes, PQSendQueryPQENDCOPYsẽ kèo bóng đá hom nay chặn mà thay vào đó trở lại một lỗi nếu chúng cần được gọi lại.

    Khi kết nối cơ sở dữ liệu đã được đặt thành kèo bóng đá hom nay chặn Chế độ vàPQEXECđược gọi là, nó sẽ tạm thời đặt trạng thái của kết nối để chặn Cho đến khiPQEXECHoàn thành.

    Thêmlibpqđược dự kiến được làm an toàn chopqsetNonblockingChức năng ở gần tương lai.

  • pqisnonblockingTrả về Trạng thái chặn của kết nối cơ sở dữ liệu.

    int pqisnonblockocking (const pgconn *Conn)

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

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

    int pqsendquery (pgconn *Conn,
                    const char *truy kèo bóng đá hom nay);

    Sau khi gọi thành côngPQSendQuery, gọiPQGetResultmột hoặc nhiều lần để có được kết quả.PQSendQuerycó thể kèo bóng đá hom nay được gọi lại (trên cùng một kết nối) cho đến khiPQGetResultđã trả lại null, cho biết rằng lệnh được thực hiện.

  • PQGetResultĐợi Kết quả tiếp theo từ trướcPQSendQuery, và trả lại nó. Null là trả lại khi truy vấn hoàn tất và sẽ kèo bóng đá hom nay còn kết quả.

    
    
          

    PQGetResultphải được gọi liên tục cho đến khi nó trả về null, chỉ ra rằng lệnh được thực hiện. (Nếu được gọi khi kèo bóng đá hom nay có lệnh nào hoạt động,PQGetResultSẽ chỉ trả lại null cùng một lúc.) Mỗi kết quả kèo bóng đá hom nay null từPQGetResultnên được xử lý bằng cách sử dụng như nhauPGRESULTCác chức năng của người phụ kiện được mô tả trước đây. Đừng quên giải phóng từng đối tượng kết quả vớiPQClearKhi được thực hiện với nó. Lưu ý rằngPQGetResultWill Chỉ chặn nếu một truy kèo bóng đá hom nay hoạt động và phản hồi cần thiết Dữ liệu chưa được đọc bởiPQConsumeInput.

Sử dụngPQSendQueryPQGetResultgiải quyết một trongPQEXEC16548_16603SQLCác lệnh, kết quả của các lệnh đó 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: Frontend có thể xử lý kết quả của một truy kèo bóng đá hom nay trong khi phần phụ trợ vẫn đang làm việc trên các truy kèo bóng đá hom nay sau này Trong cùng một chuỗi lệnh.) Tuy nhiên, gọiPQGetResultVẫn sẽ khiến Frontend đến chặn cho đến khi phụ trợ hoàn thành tiếp theoSQLlệnh. Điều này có thể tránh được bằng cách thích hợp Sử dụng thêm ba chức năng:

  • PQConsumeInputNếu đầu vào là Có sẵn từ phần phụ trợ, tiêu thụ nó.

    int pqconsumeinput (pgconn *Conn);

    PQConsumeInputThông thường trả về 1 chỉ ra"kèo bóng đá hom nay 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 đặt). Lưu ý rằng kết quả kèo bóng đá hom nay cho biết liệu có bất kỳ dữ liệu đầu vào nào thực sự được thu thập. Sau khi gọiPQConsumeInput, ứ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 kèo bóng đá hom nay được chuẩn bị để đối phó với kết quả hoặc thông báo chỉ là chưa. Thói quen sẽ đọc có sẵn dữ liệu và lưu nó trong bộ đệm, do đó gây raselect ()Chỉ định đọc sẵn sàng đi. Do đó ứng dụng có thể sử dụngPQConsumeInputĐể 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.

  • pqisbusyTrả về 1 nếu a Truy kèo bóng đá hom nay bận, nghĩa làPQGetResultSẽ chặn chờ nhập. Trả về 0 chỉ ra rằngPQGetResultCó thể được gọi với sự đảm bảo của kèo bóng đá hom nay chặn.

    int pqisbusy (pgconn *Conn);

    pqisbusysẽ kèo bóng đá hom nay chính nó cố gắng đọc dữ liệu từ phần phụ trợ; Vì vậyPQConsumeInputphải được gọi trước, hoặc trạng thái bận rộn sẽ kèo bóng đá hom nay bao giờ kết thúc.

  • pqflushcố gắng xả bất kỳ dữ liệu xếp hàng vào phụ trợ, trả về 0 nếu thành công (hoặc nếu Hàng đợi gửi trống) hoặcEOFNếu nó thất bại vì một số lý do.

    int pqflush (pgconn *Conn);

    pqflushCần được gọi Trên kết nối kèo bóng đá hom nay chặn trước khi gọiselect ()Để xác định xem có phản hồi có tới nơi. Nếu 0 được trả lại, nó đảm bảo rằng kèo bóng đá hom nay có dữ liệu xếp hàng vào phần phụ trợ chưa thực sự được gửi. Chỉ một các ứng dụng đã sử dụngpqsetNonblockingCó nhu cầu về điều này.

  • PQSocketlấy tệp Số mô tả cho ổ cắm kết nối phụ trợ. Một hợp lệ mô tả sẽ = 0; kết quả của -1 chỉ ra rằng kèo bóng đá hom nay Kết nối phụ trợ hiện đang mở.

    int pqsocket (const pgconn *Conn);

    PQSocketnên sử dụng Có được bộ mô tả ổ cắm phụ trợ để chuẩn bị cho thực thiselect (). Điều này cho phép một ứng dụng sử dụng kết nối chặn để chờ phản hồi phụ trợ hoặc các điều kiện khác. Nếu kết quả củaselect ()Cho biết dữ liệu đó có thể được đọc từ ổ cắm phụ trợ, sau đóPQConsumeInputnên được gọi để đọc dữ liệu; sau đó,pqisbusy, PQGetResult, và/hoặcpqnotifyescó thể được sử dụng để xử lý phản hồi.

    Kết nối kèo bóng đá hom nay chặn (đã sử dụngpqsetNonblocking) kèo bóng đá hom nay nên sử dụngselect ()cho đến khiPQFLUSHđã trả về 0 cho biết rằng kèo bóng đá hom nay có dữ liệu được đệm chờ đợi để được gửi đến phụ trợ.

Một mặt trận điển hình sử dụng các chức năng này sẽ có vòng lặp chính sử dụngChọnĐể chờ tất cả Các điều kiện mà nó phải đáp ứng. Một trong những điều kiện sẽ có sẵn từ phần phụ trợ, trongChọnCác điều khoản 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ề sai (0). Nó cũng có thể gọipqnotifyesĐể phát hiện thông báo tin nhắn (xemPhần 1.6).

Frontend sử dụngPQSendQuery/PQGetResultcũng có thể cố gắng hủy một lệnh vẫn đang được xử lý bởi phụ trợ.

  • PQRequestCancelyêu cầu rằngPostgreSQLTừ bỏ Xử lý lệnh hiện tại.

    int PQRequestCancel (PGConn *Conn);

    Giá trị trả về là 1 nếu yêu cầu hủy bỏ là Được gửi thành công, 0 nếu kèo bóng đá hom nay. (Nếu kèo bóng đá hom nay,pqerrormessageNói tại sao kèo bóng đá hom nay.) Thành công Công văn kèo bóng đá hom nay đảm bảo rằng yêu cầu sẽ có bất kỳ Hiệu ứng, tuy nhiên. Bất kể giá trị trả về củaPQRequestCancel, The Ứng dụng phải tiếp tục với việc đọc kết quả bình thường trình tự bằng cách sử dụngPQGetResult. Nếu như Việc hủy bỏ có hiệu lực, lệnh hiện tại sẽ chấm dứt sớm và trả về một kết quả lỗi. Nếu Hủy bỏ thất bại (giả sử, vì phần phụ trợ đã được thực hiện xử lý lệnh), sau đó sẽ kèo bóng đá hom nay có kết quả hiển thị tất cả.

Lưu ý rằng nếu lệnh hiện tại là một phần của giao dịch, hủy bỏ sẽ hủy bỏ toàn bộ giao dịch.

PQRequestCancelCó thể được an toàn được gọi từ một người xử lý tín hiệu. Vì vậy, nó cũng có thể sử dụng nó kết hợp với đơn giảnPQEXEC, Nếu quyết định hủy bỏ có thể được thực hiện trong một trình xử lý tín hiệu. Vì ví dụ,PSQLGọiPQRequestCanceltừ ASigintTrình xử lý tín hiệu, do đó cho phép Tương tác hủy các truy kèo bóng đá hom nay mà nó phát hành thông quaPQEXEC. Lưu ý rằngPQRequestCancelsẽ kèo bóng đá hom nay có tác dụng nếu Kết nối hiện kèo bóng đá hom nay mở hoặc hiện tại kèo bóng đá hom nay xử lý một lệnh.