1

クエリの実行が失敗した後、PQresultErrorField API を使用してエラーの詳細を取得できません。接続で PQerrorMessage を使用すると、正しいエラー (制約違反 xxx_pk など) が返され、PQresultStatus は FATAL_ERROR を示します。

しかし、API PQresultErrorField(result, PG_DIAG_SQLSTATE)) を使用すると、NULL の結果が得られます。他のフィールド コードでも null の結果が得られます。この API は でコンパイルする必要がありますか?

Postgres のバージョンは 9.2.1 です libpq C ライブラリを使用

4

1 に答える 1

0

適用できない場合にのみ NULL を返すことになっています。その簡単なテストは私にとってうまくいきます:

  PGresult* res = PQexec(conn, "SELECT * FROM foobar");
  if (res) {
    if (PQresultStatus(res) == PGRES_FATAL_ERROR) {
      char* p = PQresultErrorField(res, PG_DIAG_SQLSTATE);
      if (p) {
        printf("sqlstate=%s\n", p?p:"null");
      }
    }
  }

結果:

sqlstate=42P01

于 2013-09-06T21:16:15.337 に答える