postgresql - 是否可以使 \copy 插入文件的列数少于创建的表?
问题描述
我正在使用以下psql
命令将数据导入 postgresql 数据库:
\COPY tablename FROM '/home/user/mycsv.txt' WITH CSV HEADER DELIMITER ';' NULL AS 'null';
此命令适用于与 .csv 具有相同列数的 csv 文件tablename
。但是,我在一个项目中,旧 csv 文件的列数少于新文件,我需要将这些旧文件插入到 postgresql 中。有没有办法让\copy
命令将丢失的数据插入null
额外的列而不是返回以下错误?
ERROR: missing data for column "firstMissingColumn"
现在,我看到的唯一可能的解决方案是修改旧的 csv 文件,用null
. 但我不认为这是一个理想的解决方案。有没有更简单的方法来解决这个问题?我可以使用比创建的表少的列插入文件\copy
吗?
解决方案
您可以列出目标列。手册:
对于
COPY FROM
,文件中的每个字段都按顺序插入到指定的列中。未在列列表中指定的表列COPY FROM
将接收其默认值。
除非您设置了自定义列默认值,否则默认值null
就像您想要的那样。所以:
\COPY tablename(col1, col2, col3) FROM '/home/user/mycsv.txt' WITH CSV HEADER DELIMITER ';' NULL AS 'null';
推荐阅读
- docker - 构建 docker 容器时 gcsfuse 无法挂载
- .net - 为什么在使用 WCF 服务时客户端应用程序需要证书的私钥?
- mysql - MariaDB 中的外键约束格式不正确
- java - Mockito 测试 java 8 lambda Consumer API
- xamarin - 即使安装了工具也无法运行 .net ef
- system-verilog - 系统verilog中的任务延迟
- spring - 如何在 Spring Boot 中为包含匿名用户表单的任何页面处理会话创建和添加隐藏的输入 csrf 令牌?
- javascript - 哪个标志添加到 chrome 看不到 c:/fakepath
- r - 在 R 中创建自定义 dplyr 数据转换函数
- sql-server - 如何在 SQL Server 存储过程中将架构名称作为参数传递?