Massinsats
Du kan modifiera bulkinfogningen av tre kolumner med @Ketema:
INSERT INTO "table" (col1, col2, col3)
VALUES (11, 12, 13) , (21, 22, 23) , (31, 32, 33);
Det blir:
INSERT INTO "table" (col1, col2, col3)
VALUES (unnest(array[11,21,31]),
unnest(array[12,22,32]),
unnest(array[13,23,33]))
Ersätta värdena med platshållare:
INSERT INTO "table" (col1, col2, col3)
VALUES (unnest(?), unnest(?), unnest(?))
Du måste skicka arrayer eller listor som argument till den här frågan. Det betyder att du kan göra stora bulkinfogningar utan att göra strängsammansättning (och alla dess problem och faror:sql-injektion och att citera helvetet).
Massuppdatering
PostgreSQL har lagt till tillägget FROM till UPDATE. Du kan använda det på detta sätt:
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;
Manualen saknar en bra förklaring, men det finns ett exempel på postgresql-admins e-postlista. Jag försökte utveckla det:
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;
Det finns också andra inlägg på StackExchange som förklarar UPDATE...FROM..
med en VALUES
sats istället för en underfråga. De kan vara lättare att läsa, men är begränsade till ett fast antal rader.