Freitag, 15. Juli 2011

Update multiple columns with select statement in Postgres

Wenn man mehrere Spalten in per SELECT updaten will, muss man in Postgres eine spezielle Syntax verwenden. Die Standard Update Syntax funktioniert (noch) nicht mehr hier unter 'Compatibility'.

Das nachfolgende Beispiel zeigt die Möglichkeiten für das gewünschte Update auf mehrere Spalten:

CREATE TEMP TABLE test (id int, a varchar, b varchar);

INSERT INTO test VALUES (1, 'a', 'b');

UPDATE test SET (a, b) = ('c', 'd') WHERE id = 1; -- << OK

UPDATE test SET a = (SELECT 'c'), b = (SELECT 'd') WHERE id = 1; -- << OK

UPDATE test SET (a, b) = (SELECT 'c', 'd') WHERE id = 1; -- << FAIL

UPDATE test SET a = sub.a, b = sub.b FROM (SELECT 'c' AS a, 'd' AS b) sub WHERE id = 1; -- << OK