Вы что-то не так поняли: PQsendQuery()
отправляет асинхронный запрос, означающий, что команда не блокируется, пока не станут доступны результаты.Тем не менее, вы можете не вызывать PQsendQuery()
еще раз, прежде чем все результаты будут прочитаны!
С man-страницы:
После успешного вызова PQsendQuery вызовите PQgetResult один илибольше раз, чтобы получить результаты. PQsendQuery не может быть вызван снова (для того же соединения), пока PQgetResult не вернет нулевой указатель, указывающий, что команда выполнена.
Как указывает man-страница, вы могли быоткрыть несколько соединений для запуска нескольких одновременных запросов.Затем разные результаты ассоциируются с разными дескрипторами базы данных.
PostgreSQLc async io api не предоставляет механизмов обратного вызова;Тем не менее, это не так сложно построить себяМожно использовать libevent, поскольку вы можете получить дескриптор файла сокета с помощью PQsocket()
.Тем не менее, чтобы заставить его работать, нужно немного клея.