【发布时间】: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 以外的任何其他客户端中运行您的代码?..