【发布时间】:2021-09-30 03:57:56
【问题描述】:
我们正在开发一个 PostgreSQL 数据库。我们在表中有数千条记录要更新。由于我们正在执行验证,我们必须一一提交记录。
问题是如果有 10000 条记录并且在记录号 9000 处发生错误,我们有 8999 条记录提交到数据库。我们不想保留半途处理的数据。
我们如何实现一个功能,以便在发生错误时回滚所有内容?我知道如果记录被提交,我们不能回滚。我需要一种不同的方法。
【问题讨论】:
-
BEGIN; <DO MANY INSERTS> COMMIT;。如果在中发生错误 ROLLBACK; -
是的,您可以看到:JDBC transactions 或 SO answer。
-
我怀疑您必须逐行
COMMIT。请详细说明此要求的原因。 -
@AdrianKlaver(关于您的第一条评论):您可以显式调用
BEGIN和COMMIT,并不意味着您应该,JDBC 规范说提交应该通过 JDBC API 处理。否则可能会导致驱动程序出现未定义的行为。 -
@MarkRotteveel,在发表评论时,OP 没有指出他们在哪里使用 Java(JDBC)。无论如何,这是一个通用的建议,即使通过 API 仍然适用。
标签: java postgresql jdbc transactions