PostgresqlJDBC驱动程序中的批量更新在自动提交中回滚



我使用postgres 9.3-1100-jdbc41 JDBC4驱动程序进行批量插入。

根据JDBC规范到应用程序以禁用自动提交并提交或回滚事务。

在我的情况下,我没有使用任何事务(即,自动提交为true),但如果批处理中的一个插入失败,插入仍然会回滚。

根据JDBC规范"如果批处理更新中的某个命令未能正确执行,则此方法将抛出BatchUpdateException,JDBC驱动程序可能会也可能不会继续处理剩余的命令在批次中。"。这里并没有说以前执行的命令将被回滚。

我的理解错了吗?如果不是,驾驶员为什么会这样做,如果是,根据规范,什么是正确的行为。

据我所知,规范本质上把这件事留给了驱动程序;它没有指定如果批处理失败,是否提交已处理的工作。

PgJDBC在事务中执行批处理,所以如果批处理的任何部分失败,那么它将全部中止。

如果您觉得这种行为是不正确的,那么您需要做的第一件事就是编写一个测试用例,证明其他驱动程序的行为与PgJDBC一致,并将其提交给PgJDBC问题跟踪器。我们没有时间研究其他驱动程序的行为,所以您需要编写测试用例并运行它——一些其他流行的数据库(MS SQL Server、Oracle、DB2、MySQL等),或者安排其他人运行它。如果您表明PgJDBC的行为与其他驱动程序处理批处理的方式不同,那么值得考虑添加一个选项来更改行为(并最终使其成为默认行为)。

相关内容

  • 没有找到相关文章

最新更新