5

PQexec断続的な接続でlibpqの関数がハングする問題があります。メーリングリストを見回した後の解決策は、非同期関数を使用してPQsendQuery/PQgetResult独自のタイムアウトを実装することです。

今私が直面している問題は、PQgetResultそれが戻るまで何度も呼び出す必要がnullあり、それが完了したことを知っているということです。ただし、アプリケーションの残りの部分では、PQresultクエリごとに1つのオブジェクトが必要です。

だから私の質問は:

  1. 複数のを連結/結合する方法はありPQresultますか?
  2. どういうわけかPQisBusyPQconsumeInputを使用して、すべての結果の準備ができるまで待ってから電話をかけることはできPQgetResultますか?
4

1 に答える 1

5

postgresql メーリング リストでこれに回答した Laurenz Albeの功績によるものです。

単一の SQL ステートメントがある場合、取得できるのは 1 つだけ PQresultです。複数のステートメントを含むクエリ文字列を送信すると、複数のステートメントが返されます。

PQsendQuery(conn, "SELECT 42; SELECT 'Hello'"); 

2 になりPQresultsます。

PQresults非同期コマンド処理を使用してのみ複数を取得できます。対応する PQexec は、最後に実行されたステートメントの PQresult のみを返します。

したがって、最後のものを除いてPQexecすべてを破棄することと同じ動作を得ることができます。PQresults

于 2012-11-30T14:17:37.383 に答える