PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Kann nicht aus der UPDATE RETURNING-Klausel in Postgres auswählen

Vor PostgreSQL 9.1 konnten INSERT/UPDATE/DELETE nur als Top-Level-Anweisungen verwendet werden. Aus diesem Grund erhalten Sie einen Syntaxfehler.

Ab 9.1 können Sie datenmodifizierende Anweisungen mit allgemeinen Tabellenausdrücken verwenden. Ihre Beispielabfrage würde wie folgt aussehen:

WITH updated AS (UPDATE test SET description = 'test' RETURNING id)
SELECT * FROM test WHERE id IN (SELECT id FROM updated);

Seien Sie vorsichtig bei der Auswahl aus der gerade geänderten Tabelle. Auf diese Weise können Sie verwirrende Ergebnisse erhalten. Da die Abfragen im selben Snapshot ausgeführt werden, sieht SELECT die Auswirkungen der UPDATE-Anweisung nicht.