1

查询执行失败后,我无法使用 PQresultErrorField API 获取错误详细信息。在连接上使用 PQerrorMessage 会给出正确的错误(约束违反 xxx_pk 等),并且 PQresultStatus 显示 FATAL_ERROR。

但是,当我使用 API PQresultErrorField(result, PG_DIAG_SQLSTATE)) 时,我得到一个 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 回答