Sisipkan massal
Anda dapat memodifikasi penyisipan massal tiga kolom dengan @Ketema:
INSERT INTO "table" (col1, col2, col3)
VALUES (11, 12, 13) , (21, 22, 23) , (31, 32, 33);
Menjadi:
INSERT INTO "table" (col1, col2, col3)
VALUES (unnest(array[11,21,31]),
unnest(array[12,22,32]),
unnest(array[13,23,33]))
Mengganti nilai dengan placeholder:
INSERT INTO "table" (col1, col2, col3)
VALUES (unnest(?), unnest(?), unnest(?))
Anda harus meneruskan array atau daftar sebagai argumen untuk kueri ini. Ini berarti Anda dapat melakukan penyisipan massal yang besar tanpa melakukan penggabungan string (dan semua kerumitan dan bahayanya:injeksi sql dan mengutip neraka).
Pembaruan massal
PostgreSQL telah menambahkan ekstensi FROM ke UPDATE. Anda dapat menggunakannya dengan cara ini:
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;
Manual tidak memiliki penjelasan yang baik, tetapi ada contoh di milis postgresql-admin. Saya mencoba menguraikannya:
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;
Ada juga posting lain di StackExchange yang menjelaskan UPDATE...FROM..
menggunakan VALUES
klausa alih-alih subquery. Mereka mungkin lebih mudah dibaca, tetapi dibatasi pada jumlah baris yang tetap.