Мне нужно обновить много столбцов во многих строках в PostgreSQL 9.1. В настоящее время я делаю это со многими разными запросами UPDATE
, каждый из которых работает с другой строкой (на основе первичного ключа):
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;
Мне нужно сделать несколько тысяч таких запросов.
Могу ли я в любом случае «массово обновить» множество строк в одном запросе в PostgreSQL? Если вы используете INSERT
, вы можете вставить сразу несколько строк: (INSERT INTO mytable (column_a, column_b) VALUES ( (12, 6), (1, 45) );
), есть что-то подобное для UPDATE
?
Что-то вроде:
UPDATE mytable SET (id, column_a, column_b) FROM VALUES ( (1, 12, 6), (2, 1, 45), (3, 56, 3), … )
??
Важным моментом является то, что каждое «ЗНАЧЕНИЕ» будет обновлять только одну строку (на основе WHERE id =
). Каждая строка будет иметь одинаковое фиксированное количество столбцов, которые необходимо обновить, но каждая строка будет иметь разные значения для каждого столбца, поэтому UPDATE mytable SET column_a = 12, column_b = 6 WHERE id IN (1, 2, 3);
не будет работать.