在查询执行失败后,我无法使用PQresultErrorField API获取错误详细信息。在连接上使用PQerrorMessage会给出正确的错误(约束违规xxx_pk等),PQresultStatus显示FATAL_ERROR。
但是,当我使用API PQresultErrorField(result,PG_DIAG_SQLSTATE))时,我得到一个NULL结果。其他字段代码也给我null结果。 该API是否需要编译?
Postgres版本是9.2.1 使用libpq C库
答案 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