您好,我正在尝试定期在数据库中插入一个文件。 此文本文件由 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/