저는 PostgreSQL 8.3을 사용 중이며 libpq
API를 사용하는 C++ 프로그램을 작성하고 있습니다. PQsendQuery()
함수와 비동기 적으로 명령을 실행합니다. 시간 초과 처리 기능을 구현하려고합니다. 타임 아웃이 만료되면 PQcancel()
을 호출하여 구현했습니다. 나는 1 밀리 초의 타임 아웃으로 100 000 행 (약 0.5 초 지속)을 반환하는 쿼리를 테스트하여 서버가 실행을 완료 할 때까지 PQcancel()
블록을 차단 한 다음 성공적인 쿼리를 반환한다는 것을 알았습니다.PostgreSQL : C/C++ 프로그램에서 쿼리 취소
문서에 성공적인 취소 요청이 있어도 쿼리가 여전히 실행될 수 있다고 나와 있습니다. 내 문제는 PQcancel()
내 실행 스레드를 차단하는 것입니다. 비동기 처리 (Boost Asio 프레임 워크 사용) 때문에 SQL 쿼리를 실행하는 것보다 다른 작업을 할 수있는 프로그램이 하나의 스레드에서만 실행되므로 허용되지 않습니다. .
정상적으로 PQcancel()
이 차단됩니까? 비 차단 취소 요청을하는 방법이 있습니까?
사이드 노트 : 8.3 버전은 지원되지 않습니다. 지원되는 버전 중 하나로 업데이트하는 것이 좋습니다. –
내가 사용하는 Linux 배포판 (SUSE 11)에서 제공되는 버전입니다. – petersohn
배송 방법은 중요하지 않습니다. 그것은 아직 구식이다. –