postgresql - 复制带有附加数据的 csv 文件

标签 postgresql csv libpqxx postgresql-copy

我有下表:

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/

相关文章:

python - 如何将带有嵌套字典的列表写入 csv 文件?

iphone - 以 CSV 格式将数据导出到邮件

PostgreSQL:错误: "NOT"处或附近的语法错误

postgresql - 如何使用您的用户名进入 postgres?

postgresql - Mybatis - 在更新插入时返回 ID

postgresql - Postgresql 9.1 中的正确整理

python - Fedora30 上 libpq.so.5 和 PQencryptPasswordConn 版本 RHPG_10 的问题

postgresql - 级联删除在 Sequelize 中不起作用

google-app-engine - 将 NDB 数据存储记录导出到 Cloud Storage CSV 文件

sql - postgresql 在可序列化事务上永远挂起