Tôi đang sử dụng PostgreSQL 8.3 và viết chương trình bằng C++ sử dụng API libpq
. Tôi thực thi các lệnh một cách không đồng bộ với hàm PQsendQuery()
. Tôi đang cố gắng triển khai tính năng xử lý thời gian chờ. Tôi đã thực hiện nó bằng cách gọi số PQcancel()
khi hết thời gian chờ. Tôi đã thử nghiệm nó với truy vấn trả về 100 000 hàng (nó kéo dài khoảng 0,5 giây) với thời gian chờ là 1 ms và thấy rằng thay vì hủy lệnh, PQcancel()
khối cho đến khi máy chủ kết thúc thực hiện, sau đó trả về bằng truy vấn thành công.PostgreSQL: hủy truy vấn từ chương trình C/C++
Tôi hiểu rằng tài liệu nói rằng ngay cả khi yêu cầu hủy thành công, truy vấn vẫn có thể được thực thi. Vấn đề của tôi là PQcancel()
chặn luồng thực thi của tôi, không chấp nhận được vì tôi sử dụng xử lý không đồng bộ (sử dụng khung Asio Boost) để chương trình của tôi có thể thực hiện các tác vụ khác ngoài thực hiện truy vấn SQL, chỉ chạy trên một luồng .
Có bình thường là PQcancel()
khối không? Có cách nào để thực hiện yêu cầu hủy không chặn không?
Lưu ý phụ: Phiên bản 8.3 không được hỗ trợ. Cân nhắc việc cập nhật lên một trong các phiên bản được hỗ trợ. –
Đây là phiên bản được phân phối bởi bản phân phối Linux mà tôi sử dụng (SUSE 11). – petersohn
Nó không quan trọng làm thế nào nó được vận chuyển. Nó vẫn còn lỗi thời. –