首页 > 解决方案 > 使用带有自定义分隔符的 postgres 按字符大小复制文本文件

问题描述

我需要复制一个分隔符混乱的文本文件。我相信分隔符是空格。但是,某些列值是空的,我无法区分哪个列,这使得将数据加载到数据库变得更加困难,因为该空间没有表示任何内容。因此,当我尝试时COPY,映射不正确,我得到ERROR: extra data after last expected column

我试图将分隔符更改为逗号等,但我仍然遇到上述相同的错误。当我尝试使用适当的分隔符加载一些虚拟数据时,可以使用以下代码。

COPY usm00070219(HEADREC_ID,YEAR,MONTH,DAY,HOUR,RELTIME,NUMLEV,P_SRC,NP_SRC,LAT,LON) FROM 'D:\....\USM00070219-data.txt' DELIMITER ' ';

这是示例数据:

在此处输入图像描述 它应该有 11 列,但第一行的数据只有 10,它无法识别空值列。间距根本没有帮助!

有什么方法可以按字符大小分隔列作为分隔符并强制数据除以给定的大小?

标签: postgresqlcsvcopyimport-from-excel

解决方案


COPY不适用于处理固定宽度的文本文件。我可以想到两个选择:

  • 使用 .将文件按原样加载到具有单个文本列的表中COPY。然后使用regexp_split_to_array将其拆分为其组件并将它们插入到另一个表中。

  • 您可以使用file_fdw创建一个带有单个文本列的外部表,如上所示并对其进行操作。这样可以节省将文件加载到数据库中。

  • 您可以尝试使用固定宽度文本文件的外部数据包装器。


推荐阅读