问题描述
我有多个CSV文件,而且每天都有新文件。每个文件中的数据应定期添加到postgres DB中。问题是每个CSV文件都有一个带有ID的列。所以在添加第二个文件
copY public."ERROR" FROM 'C:\CSV\error.csv' DELIMITER ',' CSV HEADER;
我已经收到错误:
ERROR: duplicate key value violates unique constraint "ERROR_pkey"
DETAIL: Key (id)=(0) already exists.
KONTEXT: copY ERROR,line 2
但是,在数据库中,我仍然需要一个id列作为主键,因此我不能只删除它。有没有一种方法可以自动生成一个递增ID?
例如,像这样。
CSV File 1: CSV File 2:
id error value id error value
0 engine 10 0 engine 22
1 lamp_dashboard 15 1 door_left 13
2 door_left 17 2 indicator_left 37
3 boot 8 3 indicator_right 65
4 front_wheel 13 4 cockpit 16
Data in DB:
id error value
0 engine 10
1 lamp_dashboard 15
2 door_left 17
3 boot 8
4 front_wheel 13
5 engine 22
6 door_left 13
7 indicator_left 37
8 indicator_right 65
9 cockpit 16
解决方法
我认为您唯一的机会是将文件复制到登台表中,然后将数据从那里复制到真实表中
create temporary table import_data
(
id integer,error text,value integer
);
COPY import_data FROM 'C:\CSV\error.csv' DELIMITER ',' CSV HEADER;
insert into public."ERROR" (error,value)
select error,value
from import_data;
,
我认为可以通过指定要复制的CSV列(不带ID)来解决。这样就应该自动增加ID。 https://stackoverflow.com/a/29963692/8021888