バルクインサート
@Ketemaによって3列の一括挿入を変更できます:
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
を使用する サブクエリの代わりに句。読みやすくなるかもしれませんが、行数は固定されています。