8

我无法通过 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输出都不能从交易块中取出吗?

4

1 回答 1

2

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

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

与交易无关。

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

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
于 2012-10-24T23:09:08.327 回答