是否可以使 \copy 插入的文件的列数少于创建的 table?

Is it possible to make \copy insert files that have less columns than the created table?

我正在使用以下 psql 命令将数据导入 postgresql 数据库:

\COPY tablename FROM '/home/user/mycsv.txt' WITH CSV HEADER DELIMITER ';'  NULL AS 'null';

此命令适用于列数与 tablename 相同的 csv 文件。但是,我在一个项目中,旧的 csv 文件的列少于新文件,我需要将这些旧文件插入到 postgresql 中。有什么方法可以使 \copy 命令将缺失数据作为 null 插入额外的列而不是返回以下错误?

 ERROR:  missing data for column "firstMissingColumn"

现在,我看到的唯一可能的解决方案是通过用 null 填充额外的列来修改旧的 csv 文件。但我不认为这是一个理想的解决方案。有没有更简单的方法来解决这个问题?我可以使用 \copy 插入列数少于创建的 table 的文件吗?

您可以列出目标列。 The manual:

For COPY FROM, each field in the file is inserted, in order, into the specified column. Table columns not specified in the COPY FROM column list will receive their default values.

除非您设置了自定义列默认值,否则默认值为 null,如您所愿。所以:

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