使用带有自定义分隔符的 postgres 按字符大小复制文本文件

Posted

技术标签:

【中文标题】使用带有自定义分隔符的 postgres 按字符大小复制文本文件【英文标题】:Copy text file using postgres with custom delimiter by character size 【发布时间】:2019-09-26 15:12:02 【问题描述】:

我需要复制一个分隔符混乱的文本文件。我相信分隔符是空格。但是,某些列值是空的,我无法区分哪个列,这使得将数据加载到数据库变得更加困难,因为该空间没有表示任何内容。因此,当我尝试 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,它无法识别空值列。间距根本没有帮助!

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

【问题讨论】:

【参考方案1】:

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

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

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

有a foreign data wrapper for fixed-width text files可以试试。

【讨论】:

以上是关于使用带有自定义分隔符的 postgres 按字符大小复制文本文件的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Antlr4 中实现带有自定义分隔符的 q 引用字符串

将 NSDictionary 解析为带有自定义分隔符的字符串

使用自定义分隔符将数字格式化为字符串? [复制]

Python:使用自定义分隔符格式化字符串[重复]

带有 CASE 的 Postgres 自定义函数

Javascript按带有分隔符的字符串中的字符串排序