COPY FROMで一時テーブル(TEMPORARY)に取り込んで、そのテーブルからINSERT ON CONFLICTでUPSERTするのが高速だと思われます。
PostgreSQLでCSVからUpdateをかける
PostgreSQLのUPSERT方式の簡易性能比較
追記
サンプル追記
SQL
1-- Create tmp table
2create temp table tmp (id int, day date,value varchar(20)) on commit drop;
3
4-- Import data from csv:
5copy tmp from 'C:/test.csv' delimiter ',' csv header;
6
7-- IDが重複しているもののうち最新の日付以外を削除
8delete from tmp as target where day < (select max(day) from tmp where id=target.id);
9
10-- Update table from tmp
11update import_test_tbl set
12 id = tmp.id
13, date = tmp.day
14, value = tmp.value
15from tmp
16where import_test_tbl.id = tmp.id
17;
18-- Insert table from tmp
19insert into import_test_tbl
20select id, day, value
21from tmp
22where not exists( --キーが存在していないもの
23 select 1 from import_test_tbl where id = tmp.id
24 )
25;
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/18 03:25
2018/10/18 03:51 編集
2018/10/18 05:48
2018/10/18 06:18
2018/10/18 07:08
2018/10/18 08:30
2018/10/18 08:48
2018/10/18 08:53
2018/10/18 08:59
2018/10/18 12:17
2018/10/24 06:10
2018/10/24 06:26
2018/10/24 06:39
2018/10/24 06:44 編集
2018/10/24 06:59
2018/10/25 13:00
2018/10/25 14:12
2018/10/25 23:17
2018/10/26 00:19
2018/10/26 02:40 編集
2018/10/26 02:46
2018/10/26 02:47 編集
2018/10/26 03:31