postgresql - 如何在postgres中复制文件

标签 postgresql file copy

您好,我正在尝试定期在数据库中插入一个文件。 此文本文件由 JBOSS 应用程序生成

唯一的困难是线条不是真正的结构化。

例子:

Text1 (tab) text2 (tab) text3
Text1
text1 (tab- text2 (tab) text3
...

我挣扎的部分是有时有 text2 和 text3 的数据,有时没有,当运行时

COPY table_name (datumorig,rest0,rest1) FROM 'file/location/filename.txt' with NULL AS '';

我收到错误消息,rest0 没有数据。

我做错了什么?

最佳答案

问题是默认情况下,文件的每个字段都需要 TAB 分隔符。

当它到达上面文件中的第 2 行时,它遇到了行尾 (EOL),因此不会处理,因为它无法填充字段 rest0 和 rest1(请参阅 http://www.postgresql.org/docs/9.3/static/sql-copy.html 并向下滚动到文件格式)。

如果您可以将 JBOSS 文件更改为使用空格分隔符而不是制表符,则可以将整个文件导入到一个用一个文本字段定义的暂存表中,然后使用查询来确定如何将行移动到目标表中,例如

Text1 text2 text3
Text1
Text1 text2

就是你的文件内容,那么

CREATE TABLE staging (impfield text)

然后在不指定分隔符的情况下运行导入,然后再执行此操作:

UPDATE DestinationTable
SET datumorig = LEFT(impfield, 5)
, rest0 = SUBSTRING(impfield from 7 for 5)
, rest1 = SUBSTRING(impfield from 13 for 5)
FROM staging

关于postgresql - 如何在postgres中复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30214667/

相关文章:

PostgreSQL,同时使用两个窗口函数

ruby-on-rails - 通过后台作业插入/更新数据库,同时最大限度地减少读取影响

linux - 在使用文件时截断文件 (Linux)

file - Rust-开放的动态作者人数

c - sscanf 在大数上出现段错误

postgresql - 亚马逊 RDS : Thousands of PostGIS debugging messages appearing in my logs

sql - 条件计数 > 0 的多对多查询

arrays - Swift 4 按值复制内部有数组的对象数组

在 C 中复制一个 int8_t 数组

c# - 如何将字节数组粘贴到文件 C# 中?