咳といいます。

postgresの PGconn.async_exec を使い始めたのですが、

  "PQsendQuery() -- another query already in progress." 

というエラーが出て困っています。

PQsendQuery()をgoogleで聞いたら次のサイトが出てきたので

 http://www.postgresql.jp/document/pg653doc/j/programmer/x3420.htm

によると 

| PGresult *PQgetResult(PGconn *conn);
|
| 問い合わせが完了したことを示す NULL が返るまで, PQgetResult を
| 繰り返して呼び出さなければなりません.(問い合わせがなされていな
| い状態で呼び出すと, PQgetResult はただちに NULL を返すだけです)

とのことです。

それで postgres.c をちょっと直してみたら上記のエラーがなくなりました。
この変更、正しいでしょうか? PQisBusyの検査を外しました。

--- postgres.c.ORG      Sat Feb  9 04:12:40 2002
+++ postgres.c  Sat Feb  9 04:13:07 2002
@@ -230,12 +230,10 @@
 
        Check_Type(str, T_STRING);
 
-       while(PQisBusy(conn) == 0) {
-               result = PQgetResult(conn);
-               if(result == NULL)
-                       break;
+       while(result = PQgetResult(conn)) {
                PQclear(result);
        }
+
        if (!PQsendQuery(conn, RSTRING(str)->ptr)) {
                rb_raise(rb_ePGError, PQerrorMessage(conn));
        }