将 CSV 导入到 postgreSQL 中的表中,忽略重复项 - 亚马逊 AWS/RDS
Posted
技术标签:
【中文标题】将 CSV 导入到 postgreSQL 中的表中,忽略重复项 - 亚马逊 AWS/RDS【英文标题】:Import CSV to table in postgreSQL ignoring duplicates - Amazon AWS/RDS 【发布时间】:2021-10-24 04:11:41 【问题描述】:我有一个托管在 AWS (RDS) 上的 PostgreSQL。我创建了几个表,并使用 PgAdmin4 上的“导入/导出”工具将一些 .csv 文件导入到这些表中。
我需要每月更新表中的数据,我会通过上传 .csv 文件来完成。
我现在面临的问题是:我正在尝试从 .csv 文件在表中插入新数据,但我需要忽略重复值。
我找到了一种方法来做到这一点here(下面的代码)但是copy
命令在 PgAdmin 上不起作用。仅当我使用导入/导出工具时,复制才有效。
CREATE TEMP TABLE tmp_table
ON COMMIT DROP
AS
SELECT *
FROM indice-id-cnpj
WITH NO DATA;
COPY tmp_table FROM 'C:/Users/Win10/Desktop/Dados/ID-CNPJ.csv';
INSERT INTO indice-id-cnpj
SELECT *
FROM tmp_table
ON CONFLICT DO NOTHING
这是我对 PostgreSQL 的第一次体验(除了 uni 中的一个主题)。我可以通过使用 excel 并做一些手动工作来解决这个问题,但我正在寻找一个“长期”解决方案,关于如何使用 .csv 文件不断更新表格,始终忽略重复项。
提前致谢。
【问题讨论】:
不要使用 pgAdmin 使用 psql 代替。这是一个更好的启动体验。 应该添加,如果你使用psql
,你将需要使用\copy
。
【参考方案1】:
所以,我找到了解决方案。
正如 Adrian 所说,我必须使用 psql。
CREATE TEMP TABLE tmp_table AS SELECT * FROM table-name WITH NO DATA;
\copy tmp_table FROM 'C:/Users/Win10/folder/filename.csv' DELIMITER ',' CSV ENCODING 'UTF8' ;
INSERT INTO "table-name" SELECT * FROM tmp_table ON CONFLICT DO NOTHING;
DROP TABLE tmp_table;
由于我使用的是 psql,因此有必要使用命令 \copy
而不是 COPY
。此外,每个命令都必须以“;”结尾并且有必要在最后删除tmp_table
。
【讨论】:
以上是关于将 CSV 导入到 postgreSQL 中的表中,忽略重复项 - 亚马逊 AWS/RDS的主要内容,如果未能解决你的问题,请参考以下文章
使用 NodeJs 将数据从 CSV 导入 Oracle 中的表