问题
I can't get information of that simple question over the PostgreSQL documentation, over the Web or even here on StackOverflow... I must not unsertand something essential here.
I am making a simple SELECT
/UPDATE
transaction in PostgreSQL:
START TRANSACTION;
SELECT "column" FROM "table" WHERE "criterion" = 'value' AND "activated" = true;
UPDATE "table" SET "activated" = false WHERE "criterion" = 'value';
COMMIT
Basically, I need to get the value of a column when its activated
state is true
and then deactivate it.
PostgreSQL tells me that there was a 1 row result that has been cancelled
The same happens if I do the following (basically the same transaction withotu the UPDATE
statement):
START TRANSACTION;
SELECT "column" FROM "table" WHERE "criterion" = 'value' AND "activated" = true;
COMMIT
What don't I understand about transactions? Can't any SELECT
output get out of a transaction block?
回答1:
This will return all "column"'s values from the updated rows:
UPDATE "table" SET "activated" = false WHERE "criterion" = 'value' AND "activated" = true
returning "column";
There is no relation to the transaction.
returning
will return the values as if a select
was issued:
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
来源:https://stackoverflow.com/questions/13058790/how-to-get-the-result-of-select-statement-inside-a-transaction