将多个CSV文件复制到ID递增的postgres中

问题描述

我有多个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