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 đá pháp đượ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 đá pháp đượ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ế.

32.9. kèo bóng đá pháp bộ#

PostgreSQLcung cấp kèo bóng đá pháp bộ quangheThông kèo bóng đá pháplệnh. Một phiên khách đăng ký sự quan tâm của nó đối với một kênh thông kèo bóng đá pháp cụ thể vớiNgheLệnh (và có thể ngừng nghe vớiUnitSenlệnh). Tất cả các phiên nghe trên một kênh cụ thể sẽ được kèo bóng đá pháp bộ khi AThông kèo bóng đá phápLệnh có tên kênh đó được thực thi bởi bất kỳ phiên nào. MỘTtải trọngHồiChuỗi có thể được truyền để truyền đạt dữ liệu bổ sung cho người nghe.

libpqỨng dụng gửinghe, UndistenThông kèo bóng đá phápCác lệnh như các lệnh SQL thông thường. Sự xuất hiện củaThông kèo bóng đá phápTin nhắn sau đó có thể được phát hiện bằng cách gọipqnotify.

hàmpqnotifyTrả về thông kèo bóng đá pháp tiếp theo từ danh sách các thông kèo bóng đá pháp thông kèo bóng đá pháp chưa được xử lý nhận được từ máy chủ. Nó trả về một con trỏ null nếu không có thông kèo bóng đá pháp đang chờ xử lý.pqnotify, nó được coi là xử lý và sẽ bị xóa khỏi danh sách các thông kèo bóng đá pháp.

pgnotify *pqnotifyes (pgconn *Conn);

Sau khi xử lý Apgnotifyđối tượng được trả về bởipqnotifyes, Hãy chắc chắn giải phóng nó bằngpqfreemem. Nó đủ để giải phóngpgnotifyCon trỏ; TheRelnameExtraTrường kèo bóng đá pháp đại diện cho phân bổ riêng. (Tên của các trường này là lịch sử; đặc biệt, tên kênh kèo bóng đá pháp cần phải làm gì với tên quan hệ.)

Ví dụ 32.2Đưa ra một chương trình mẫu minh họa cho việc sử dụng kèo bóng đá pháp bộ.

pqnotifykèo bóng đá pháp thực sự đọc dữ liệu từ máy chủ; nó chỉ trả về các tin nhắn được hấp thụ trước đó bởi một người kháclibpqHàm. Trong các bản phát hành cổ xưa củalibpq, Cách duy nhất để đảm bảo nhận được thời gianThông kèo bóng đá phápTin nhắn đã liên tục gửi các lệnh, thậm chí các lệnh trống, sau đó kiểm trapqnotifyessau mỗiPQEXEC. Mặc dù điều này vẫn hoạt động, nhưng nó kèo bóng đá pháp được lãng phí sức mạnh xử lý.

Một cách tốt hơn để kiểm traThông kèo bóng đá phápTin nhắn Khi bạn kèo bóng đá pháp có lệnh hữu ích để thực thi là gọiPQConsumeInput, sau đó kiểm trapqnotifyes. Bạn có thể sử dụngselect ()Để chờ dữ liệu đến từ máy chủ, do đó kèo bóng đá pháp sử dụngCPUsức mạnh trừ khi có việc gì đó. (Nhìn thấyPQSocketĐể có được số mô tả tệp để sử dụng vớiselect ().) Lưu ý rằng điều này sẽ hoạt động OK cho dù bạn gửi các lệnh vớiPQSendQuery/PQGetResulthoặc đơn giản là sử dụngPQEXEC. Tuy nhiên, bạn nên nhớ kiểm trapqnotifyessau mỗiPQGetResulthoặcPQEXEC, để xem liệu có bất kỳ thông kèo bóng đá pháp nào xuất hiện trong quá trình xử lý lệnh không.