我正在尝试确定某个事务是否因应用程序而失败。怎么办呢?
此外,是否可以确定事务失败的位置,例如违反约束的特定写入?
答案 0 :(得分:3)
在常规libpq
中,您会:
使用PQresultStatus
PQresultErrorField(thePgResult, PG_DIAG_SQLSTATE)
获取SQLSTATE
使用PQerrorMessage
获取错误消息以显示给用户。 不依赖于在您的应用程序中解析它,而是使用SQLSTATE
以及结果结构中的其他字段。
请参阅connection status functions,libpq exec functions以及libpq
文档的其余部分。
相关:How to get the sql state from libpq?
我没有使用libpqxx的经验,但我希望它能将SQL错误包含在带有SQLState等字段的C ++异常中。请参阅the getting started guide for libpqxx和the libpqxx exception classes reference。
This mailing list post,并在该线程的答复也将是利益,但是要知道这是从2007年,自那时以来的PostgreSQL一直延续到报告中的详细信息PQresult
,如{{1} }。不知道libpqxx是否已被扩展以利用它,但如果没有,你可能能够解开异常以获得基础PG_DIAG_CONSTRAINT_NAME
。
除非向用户显示完整的错误消息,否则AFAIK无法获得导致问题的实际值。改变它会很好。