我正在尝试确定应用程序中的事务是否失败。如何才能做到这一点?
此外,是否可以确定事务失败的位置,例如违反约束的特定写入?
我正在尝试确定应用程序中的事务是否失败。如何才能做到这一点?
此外,是否可以确定事务失败的位置,例如违反约束的特定写入?
在常规libpq
中,您将:
测试查询的结果PQresultStatus
PQresultErrorField(thePgResult, PG_DIAG_SQLSTATE)
得到SQLSTATE
用于PQerrorMessage
获取显示给用户的错误消息。不要依赖在您的应用程序中解析它,而是使用SQLSTATE
结果结构中的 , 和其他字段。
请参阅连接状态函数、libpq 执行函数libpq
和文档的其余部分。
我没有使用 libpqxx 的经验,但我希望它将 SQL 错误包装到 C++ 异常中,并带有 SQLState 等字段。请参阅libpqxx 入门指南和libpqxx 异常类参考。
这个邮件列表帖子和线程中的回复也会引起人们的兴趣,但请注意它是从 2007 年开始的,从那时起 PostgreSQL 已经扩展到报告更多信息PQresult
,例如PG_DIAG_CONSTRAINT_NAME
. 不知道是否已扩展 libpqxx 以利用这一点,但如果没有,您可能能够解开异常以获取底层PQresult
。
AFAIK 无法获得导致问题的实际值,除非向用户显示完整的错误消息。改变它会很好。