我有下表:
persons(id,id_tech,name,nationality,id_list)
还有一个 CSV 文件,其中包含列 id_tech、姓名和国籍的数据。
像这样导入数据是可行的:
\copy persons(id_tech,name,nationality) FROM '/path/to/file.csv' DELIMITER ',' CSV
id_list
值不在 CSV 文件中,因为该文件必须导入到许多服务器上,而该 id 的值可能不同。
有没有办法在为特定列提供附加值的同时导入 CSV 文件?我在文档中找不到任何相关内容。
编辑--
请注意,我的所有命令都将在 C++(多平台)中使用 pqxx 执行。由于文件的大小,我试图避免编辑文件。
编辑2 --
我正在考虑以下方法:
- 为我需要的字段创建一个具有正确默认值的临时表
- 将文件导入这个临时表
- 复制 tmp 到最终表
- 删除临时表
但我不确定性能。最大的导入可以接近 50 万行。
谢谢
最佳答案
在 Linux 上,例如,您可以使用 awk 将附加值字段添加到您的数据中,并使用 psql
从标准输入中读取:
$ cat copy.sql
\copy persons(id_tech,name,nationality,extra_col) FROM '/dev/stdin' DELIMITER ',' CSV
然后:
$ awk '
BEGIN {
FS=OFS=","
}
{
print $1,$2,$3,"additional value"
}' file.csv | psql -h host -d database -f file.sql
(在 PostgreSQL 12.4 上测试)
关于postgresql - 复制带有附加数据的 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65129057/