Групова вложка
Можете да промените груповото вмъкване на три колони от @Ketema:
INSERT INTO "table" (col1, col2, col3)
VALUES (11, 12, 13) , (21, 22, 23) , (31, 32, 33);
Става:
INSERT INTO "table" (col1, col2, col3)
VALUES (unnest(array[11,21,31]),
unnest(array[12,22,32]),
unnest(array[13,23,33]))
Замяна на стойностите с заместители:
INSERT INTO "table" (col1, col2, col3)
VALUES (unnest(?), unnest(?), unnest(?))
Трябва да подадете масиви или списъци като аргументи на тази заявка. Това означава, че можете да правите огромни групови вмъквания, без да правите конкатенация на низове (и всичките му проблеми и опасности:sql инжекция и ада за цитиране).
Групова актуализация
PostgreSQL добави разширението FROM към UPDATE. Можете да го използвате по следния начин:
update "table"
set value = data_table.new_value
from
(select unnest(?) as key, unnest(?) as new_value) as data_table
where "table".key = data_table.key;
В ръководството липсва добро обяснение, но има пример в пощенския списък на postgresql-admin. Опитах се да го обясня по-подробно:
create table tmp
(
id serial not null primary key,
name text,
age integer
);
insert into tmp (name,age)
values ('keith', 43),('leslie', 40),('bexley', 19),('casey', 6);
update tmp set age = data_table.age
from
(select unnest(array['keith', 'leslie', 'bexley', 'casey']) as name,
unnest(array[44, 50, 10, 12]) as age) as data_table
where tmp.name = data_table.name;
Има и други публикации в StackExchange, обясняващи UPDATE...FROM..
използвайки VALUES
клауза вместо подзаявка. Те може да са по-лесни за четене, но са ограничени до фиксиран брой редове.