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";

お取引とは一切関係ございません。

returningselectaが発行されたかのように値を返します。

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 に答える