複数行を一括で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/12/18
中馬崇尋
Chuma Takahiro
Chuma Takahiro