0

我正在尝试确定应用程序中的事务是否失败。如何才能做到这一点?

此外,是否可以确定事务失败的位置,例如违反约束的特定写入?

4

1 回答 1

3

在常规libpq中,您将:

  • 测试查询的结果PQresultStatus

  • PQresultErrorField(thePgResult, PG_DIAG_SQLSTATE)得到SQLSTATE

  • 用于PQerrorMessage获取显示给用户的错误消息。不要依赖在您的应用程序中解析它,而是使用SQLSTATE结果结构中的 , 和其他字段。

请参阅连接状态函数libpq 执行函数libpq和文档的其余部分。

相关:如何从 libpq 获取 sql 状态?

我没有使用 libpqxx 的经验,但我希望它将 SQL 错误包装到 C++ 异常中,并带有 SQLState 等字段。请参阅libpqxx 入门指南libpqxx 异常类参考

这个邮件列表帖子和线程中的回复也会引起人们的兴趣,但请注意它是从 2007 年开始的,从那时起 PostgreSQL 已经扩展到报告更多信息PQresult,例如PG_DIAG_CONSTRAINT_NAME. 不知道是否已扩展 libpqxx 以利用这一点,但如果没有,您可能能够解开异常以获取底层PQresult

AFAIK 无法获得导致问题的实际值,除非向用户显示完整的错误消息。改变它会很好。

于 2014-02-12T01:49:44.847 回答