Postgresql Tài liệu 8.0.26 | ||||
---|---|---|---|---|
prev | Backward nhanh | Chương 27.libpq- C Thư viện | 10652_10666 | Tiếp theo |
PostgreSQLƯu đãi kèo bóng đá euro bộ quaNghevàkèo bóng đá eurolệnh. Một phiên khách đăng ký sự quan tâm của nó trong một điều kiện kèo bóng đá euro cụ thể vớiNghelệnh (và có thể dừng lắng nghe vớiUnlisten11384_11489kèo bóng đá eurolệnh với tên điều kiện đó được thực hiện bởi bất kỳ phiên. KHÔNG Thông tin bổ sung được chuyển từ kèo bóng đá euro cho người nghe. Do đó, thông thường, bất kỳ dữ liệu thực tế nào cần Truyền đạt được chuyển qua bảng cơ sở dữ liệu. Thông thường, Tên điều kiện giống như bảng liên kết, nhưng nó là không cần thiết để có bất kỳ bảng liên kết nào.
libpqỨng dụng gửinghevàUndistenCác lệnh như các lệnh SQL kèo bóng đá euro thường. Các
Sự xuất hiện củakèo bóng đá euroTin nhắn có thể
sau đó được phát hiện bằng cách gọipqnotifyes
.
hàmpqnotifyes
Trả về
kèo bóng đá euro tiếp theo từ danh sách kèo bóng đá euro chưa được xử lý
Tin nhắn nhận được từ máy chủ. Nó trả về một con trỏ null nếu
Không có kèo bóng đá euro đang chờ xử lý. Khi một kèo bóng đá euro là
đã trở về từpqnotifyes
, đó là
được coi là xử lý và sẽ bị xóa khỏi danh sách
kèo bóng đá euro.
pgnotify *pqnotifyes (pgconn *Conn); typedef struct pgnotify char *relname; / * Tên điều kiện kèo bóng đá euro */ int be_pid; / * xử lý ID của quá trình máy chủ */ char *thêm; / * Tham số kèo bóng đá euro */ Pgnotify;
Sau khi xử lý ApgnotifyĐối tượng
Được trả về bởipqnotifyes
, Hãy chắc chắn
Miễn phí nó vớiPQFreemem
. Nó là
đủ để giải phóngpgnotifyCon trỏ; TherelnamevàExtraTrường kèo bóng đá euro đại diện cho riêng biệt
phân bổ. (Hiện tại,ExtraTrường kèo bóng đá euro được sử dụng và sẽ luôn chỉ vào một chuỗi trống.)
Lưu ý:inPostgreSQL6.4 trở lên,be_pidlà của máy chủ kèo bóng đá euro quá trình, trong khi trong các phiên bản trước đó, nó luôn luôn làPIDcủa máy chủ của riêng bạn quá trình.
Ví dụ 27-2Đưa ra một chương trình mẫu minh họa cho việc sử dụng không đồng bộ kèo bóng đá euro.
pqnotifyes
kèo bóng đá euro thực sự
Đọc dữ liệu từ máy chủ; nó chỉ trả về tin nhắn trước đó
được hấp thụ bởi người kháclibpqHàm. Trong các bản phát hành trước củalibpq, Cách duy nhất để đảm bảo biên lai kịp thời
củakèo bóng đá euroTin nhắn liên tục
Gửi các lệnh, thậm chí các lệnh trống, sau đó kiểm trapqnotifyes
sau mỗiPQEXEC
. Trong khi điều này vẫn hoạt động, nó là
kèo bóng đá euro được lãng phí sức mạnh xử lý.
Cách tốt hơn để kiểm trakèo bóng đá euroTin nhắn Khi bạn kèo bóng đá euro 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 đá euro sử dụngCPUsức mạnh trừ khi có việc gì đó.
(Nhìn thấyPQSocket
Để có được tệp
Số mô tả để sử dụng vớiselect ()
.) Lưu ý rằng điều này sẽ hoạt động tốt cho dù
Bạn gửi các lệnh vớiPQSendQuery
/PQGetResult
hoặc đơn giản là sử dụngPQEXEC
. Tuy nhiên, bạn nên nhớ kiểm trapqnotifyes
sau mỗi15523_15536
hoặcPQEXEC
, để xem có bất kỳ kèo bóng đá euro nào được đưa vào
Trong quá trình xử lý lệnh.