PostgreSQLの配列でバルクインサート

複数行を一括でINSERTする際、配列を利用できます。配列型のカラムではなく、複数行を投入する方法です。

PostgreSQLにはunnest()という関数があり、配列を行に変換できます。
たとえば、以下のようなクエリが可能になります。

INSERT INTO some_table (age, city, created_at)
SELECT unnest(array[20, 30, 40]), 'Tokyo', now();

このINSERT文では3行追加されます。配列ではない値については、同じ値が3行入ります。

プログラミング言語のステートメント例

各種言語からも同様の既述を利用できます。
rustのステートメントなどでは、以下のような書き方になります。

INSERT INTO some_table (age, city, created_at)
SELECT unnest($1::bigint[]), $2, now();

DBがunnest()の型を要求したため、配列の型を追加指定しています。
rustからはステートメントのパラメータに&Vec<i64>を渡すだけです。

一般的なプログラミング言語では配列データは基本的なオブジェクトであるため、unnest()の併用でクエリを効果的に集約できます。

⁋ 2021/09/02↻ 2024/11/07
中馬崇尋
Chuma Takahiro