postgres SQLSTATE:PQresultErrorField返回NULL

时间:2013-09-05 20:45:10

标签: c database postgresql

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

但是,当我使用API​​ PQresultErrorField(result,PG_DIAG_SQLSTATE))时,我得到一个NULL结果。其他字段代码也给我null结果。 该API是否需要编译?

Postgres版本是9.2.1 使用libpq C库

1 个答案:

答案 0 :(得分: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