postgresql - 使用带有自定义分隔符的 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,它无法识别空值列。间距根本没有帮助!
有什么方法可以按字符大小分隔列作为分隔符并强制数据除以给定的大小?
解决方案
COPY
不适用于处理固定宽度的文本文件。我可以想到两个选择:
使用 .将文件按原样加载到具有单个文本列的表中
COPY
。然后使用regexp_split_to_array
将其拆分为其组件并将它们插入到另一个表中。您可以使用file_fdw创建一个带有单个文本列的外部表,如上所示并对其进行操作。这样可以节省将文件加载到数据库中。
您可以尝试使用固定宽度文本文件的外部数据包装器。
推荐阅读
- c# - 创建跨平台应用程序(Android、iOS)作为打开 PDF 文档的选项
- bash - 在 bash 脚本中回显 fork 炸弹,而不用 fork 轰炸自己
- html - 如何根据用户权限高效渲染内容?(使用基于权限的访问控制)
- javascript - 如何获取数组中每个月的最新时间戳
- r - 用R中的单个反斜杠替换斜杠
- kubernetes - 普罗米修斯只刮一个吊舱
- asp.net-mvc - c# mvc使用@ajax.ActionLink如何调用modelpopup
- .net - 有没有一种有用的方法来检查平台之间的数据类型
- python - 使用python读取单个电子邮件链中的电子邮件数量
- c# - 使用递归方法在后台工作人员中进行异常处理