【问题标题】:Postgresql: read uncommitted data in the same transaction [closed]Postgresql:在同一事务中读取未提交的数据[关闭]
【发布时间】:2014-01-10 09:20:59
【问题描述】:

问题是通过 JDBC 使用 PostgreSQL:

  1. 开始事务(隐式)
  2. 插入一行
  3. 选择涉及您刚刚插入的行
  4. 其他
  5. 提交

并且似乎选择的结果不考虑插入。

实际需要是在第一次插入时,我在表中插入当前时间戳(我想使用 db,而不是时间服务器的日期时间!!)并且我需要在另一个插入中使用该值在同一事务的另一个表中。

【问题讨论】:

  • 选择肯定会“考虑”在同一事务中所做的更改。请向我们展示一些可重现代码来证明您的问题。
  • 这真的很基本:创建一个preparedstatement并使用时间戳进行插入,然后在提交之前从table1执行一个平面选择列,结果集的命令next()将引发错误......在提交之前表中没有行......
  • 必须是你没有告诉我们的事情。您所描述的是最基本的事务处理,它肯定可以在 Postgres 中以这种方式工作。请发布完整的 Java 代码。
  • 对不起,你是对的,实际上是参数设置中的错误(经常发生的愚蠢错误)...谢谢

标签: java postgresql jdbc transactions


【解决方案1】:

如果select 没有看到insert 生成的行,那么您正在运行的代码并没有按照您的想法执行。真正发生这种情况的唯一方法是:

  • 每条语句都在自动提交模式下运行,insert 失败,你就吞下了异常。

  • 每个语句都在其自己的 new 事务中运行,该事务保持打开且未提交 - 因此 insertselect 处于不同的尚未提交的 tx 中.

  • insertselect 不会做你认为他们会做的事。

为了告诉您更多信息,有必要查看代码 - 客户端代码和生成的 SQL。

【讨论】:

    猜你喜欢
    • 2019-03-12
    • 2018-01-15
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多