【问题标题】:SELECT query inside PostgreSQL transaction commits data even with ROLLBACK即使使用 ROLLBACK,PostgreSQL 事务中的 SELECT 查询也会提交数据
【发布时间】:2017-09-29 10:56:08
【问题描述】:

与 MSSQL 相比,我试图围绕 PostgreSQL 中的事务展开思考。我想测试一些更新命令,然后将它们回滚,SELECT 查询散布在UPDATE 命令之间,以确认结果是我所期望的。这是我正在尝试做的一个简化示例:

BEGIN;
UPDATE my_table SET int_column = 1 WHERE id = 1;

-- i want to check that the column has been set to 1
SELECT * FROM int_column WHERE id = 1;

-- i want to rollback the updates while testing
ROLLBACK;

令我困惑的是SELECT 查询似乎正在提交更新,即使ROLLBACK 作为最后一条语句。如果我删除SELECT,回滚会按预期阻止更新,但如果我把它留在那里,列实际上会更新!我必须在这里遗漏一些东西,因为在 MSSQL 中 SELECT 查询可以在事务中使用而不会出现此问题。

我无法通过搜索或PostgreSQL Transaction Documentation 找到有关此的任何详细信息。

【问题讨论】:

  • 您使用的是哪个 SQL 客户端?您是否启用了自动提交?
  • @a_horse_with_no_name 我正在使用一个名为 Postico 的软件,我在其中找不到任何涉及自动提交的选项
  • 也许它根本不支持BEGIN ... ROLLBACK 事务控制。您的示例将在 psql 中正常工作
  • github.com/jakob/Postico/issues/257 此处无需引用 Jakub,但我认为作者 Postico 有自己的看法 :)
  • @Martin-Brennan 尝试在 Postico 以外的任何其他客户端中运行您的代码?..

标签: postgresql transactions


【解决方案1】:

我使用psql 代替 Postico,我的问题已解决,好像 Postico 不支持此功能!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 2019-07-27
    • 2023-03-15
    相关资源
    最近更新 更多