如何在事务中获取SELECT语句的结果?

时间:2012-10-24 22:27:44

标签: postgresql transactions

我无法通过PostgreSQL文档,Web上甚至StackOverflow获取有关这个简单问题的信息......我不能在这里找到必要的东西。

我在PostgreSQL中做了一个简单的SELECT / UPDATE事务:

START TRANSACTION;
SELECT "column" FROM "table" WHERE "criterion" = 'value' AND "activated" = true;
UPDATE "table" SET "activated" = false WHERE "criterion" = 'value';
COMMIT

基本上,我需要在activated状态为true时获取列的值,然后停用它。 PostgreSQL告诉我,已经取消了1行结果

如果我执行以下操作,则会发生同样的情况(基本上与UPDATE语句相同的事务处理):

START TRANSACTION;
SELECT "column" FROM "table" WHERE "criterion" = 'value' AND "activated" = true;
COMMIT

我不了解交易情况?任何SELECT输出都不能退出事务块吗?

1 个答案:

答案 0 :(得分:1)

这将从更新的行返回所有“列”的值:

UPDATE "table" SET "activated" = false WHERE "criterion" = 'value' AND "activated" = true
returning "column";

与交易无关。

returning将返回值,就像发出select一样:

insert into foo (ticket, row, archived) values (3,7,true) returning *;
 ticket | row | archived 
--------+-----+----------
      3 |   7 | t

update foo
set archived = true
where not archived
returning *;
 ticket | row | archived 
--------+-----+----------
      2 |   5 | t