首页 > 解决方案 > 是否可以使 \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吗?

标签: postgresqlpsqlpostgresql-copy

解决方案


您可以列出目标列。手册:

对于COPY FROM,文件中的每个字段都按顺序插入到指定的列中。未在列列表中指定的表列COPY FROM将接收其默认值。

除非您设置了自定义列默认值,否则默认值null就像您想要的那样。所以:

\COPY tablename(col1, col2, col3) FROM '/home/user/mycsv.txt' WITH CSV HEADER DELIMITER ';' NULL AS 'null';

推荐阅读