我有下表:
persons(id,id_tech,name,nationality,id_list)
以及包含id_tech、name和nationality列数据的CSV文件。
像这样导入数据是有效的:
\copy persons(id_tech,name,nationality) FROM '/path/to/file.csv' DELIMITER ',' CSV
id_list
值不在CSV文件中,因为必须在许多服务器上导入该文件,而这些服务器的id值可能不同。
是否有方法在为特定列提供附加值的同时导入CSV文件?我在文件上找不到任何相关信息。
编辑1-
请注意,我的所有命令都将在C++(多平台)中使用pqxx
执行。由于文件太大,我尽量避免编辑它。
编辑2 --
我正在考虑以下方法:
- 为我需要的字段创建一个具有正确默认值的临时表
- 将文件导入到此临时表
- 将临时表复制到最终表
- 删除临时表
但我不确定你的表演。最大的导入量可以接近50万行。
2条答案
按热度按时间a1o7rhls1#
在Linux上,你可以使用awk将附加值字段添加到数据中,并使用
psql
从stdin读取:然后:
(在PostgreSQL 12.4上测试)
iyfamqjs2#
找到了一个解决方案,似乎比好。
如我的OP中所述,我使用libpqxx来插入数据,因此我不直接运行COPY sql请求,而是使用pqxx::stream_to
这允许我在需要时添加附加字段:
大约需要10秒来导入300K行,这对我的需要很好。