使用递增 id 将多个 CSV 文件复制到 postgres
Copy multiple CSV files into postgres with incrementing id
我有多个 CSV 文件,而且我每天都会收到新文件。应定期将每个文件中的数据添加到 postgres 数据库中。问题是每个 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
我认为你唯一的机会是将文件复制到临时 table,然后将数据从那里复制到真实 table:
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。
我有多个 CSV 文件,而且我每天都会收到新文件。应定期将每个文件中的数据添加到 postgres 数据库中。问题是每个 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
我认为你唯一的机会是将文件复制到临时 table,然后将数据从那里复制到真实 table:
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。