应用程序如何确定回滚?

时间:2014-02-12 00:42:41

标签: c++ postgresql transactions rollback libpqxx

我正在尝试确定某个事务是否因应用程序而失败。怎么办呢?

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

1 个答案:

答案 0 :(得分:3)

在常规libpq中,您会:

  • 使用PQresultStatus

  • 测试查询结果
  • PQresultErrorField(thePgResult, PG_DIAG_SQLSTATE)获取SQLSTATE

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

请参阅connection status functionslibpq exec functions以及libpq文档的其余部分。

相关:How to get the sql state from libpq?

我没有使用libpqxx的经验,但我希望它能将SQL错误包含在带有SQLState等字段的C ++异常中。请参阅the getting started guide for libpqxxthe libpqxx exception classes reference

This mailing list post,并在该线程的答复也将是利益,但是要知道这是从2007年,自那时以来的Pos​​tgreSQL一直延续到报告中的详细信息PQresult,如{{1} }。不知道libpqxx是否已被扩展以利用它,但如果没有,你可能能够解开异常以获得基础PG_DIAG_CONSTRAINT_NAME

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