您好我试图定期在数据库中插入一个文件。 此文本文件由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的数据。
我在这里做错了什么?
答案 0 :(得分:1)
问题是该文件默认情况下每个字段都需要TAB分隔符。
当它到达上面文件中的第二行时,它正在经历行结束(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