I have to update many columns in many rows in PostgreSQL 9.1. I'm currently doing it with many different UPDATE
queries, each one that works on a different row (based on the primary key):
UPDATE mytable SET column_a = 12, column_b = 6 WHERE id = 1;
UPDATE mytable SET column_a = 1, column_b = 45 WHERE id = 2;
UPDATE mytable SET column_a = 56, column_b = 3 WHERE id = 3;
I have to do several thousands of these queries.
Is there anyway I can "bulk update" lots of rows in one query in PostgreSQL? If you're using INSERT
, you can insert multiple rows at once: (INSERT INTO mytable (column_a, column_b) VALUES ( (12, 6), (1, 45) );
), Is there something like that for UPDATE
?
Something like:
UPDATE mytable SET (id, column_a, column_b) FROM VALUES ( (1, 12, 6), (2, 1, 45), (3, 56, 3), … )
??
The important points is that each 'VALUE' will only update one row (based on the WHERE id =
). Each row will have the same, fixed number of columns that need updating, but each row will have different values for each column, so UPDATE mytable SET column_a = 12, column_b = 6 WHERE id IN (1, 2, 3);
won't work.