2014-11-05 256 views
8

我试图将.txt文件导入到PostgreSQL中。该txt文件有6列:错误:在psql中使用 copy时列丢失数据

Laboratory_Name Laboratory_ID Facility ZIP_Code  City State 

和213行。

我试图用\copy把这个文件的内容为使用这个命令在PostgreSQL中称为doe2表:

\copy DOE2 FROM '/users/nathangroom/desktop/DOE_inventory5.txt' (DELIMITER(' ')) 

它给我这个错误:

missing data for column "facility" 

我在遇到这个错误时,我们四处查看了该做什么,没有任何帮助。有人遇到过这种情况么?

+1

数据在文件中看起来像什么? (几行示例) – khampson 2014-11-05 00:54:01

回答

4

三个可能的原因:

  1. 的一个或多个文件的行只有4个或更少的空格字符(您的分隔符)。

  2. 一个或多个空格字符已被转义(无意)。也许在未加引号的值末尾加一个反斜杠。对于(默认)text格式,您使用的,the manual explains:

    Backslash characters (\) can be used in the COPY data to quote data characters that might otherwise be taken as row or column delimiters.

COPY TOpg_dump相匹配的布局从表中读取数据时不会出现任何这些故障的输出。但是,也许你的文件已被编辑或来自不同的错误来源?

  1. 您并未使用您正在使用的文件认为。 psql命令行界面的\copy元命令是COPY的包装并读取客户端的本地文件。如果您的文件存在于服务器上,请改用SQL命令COPY
+0

我不认为它是第一个,因为我将我的分隔符更改为','并且发生了同样的事情。我不认为它是第二个,因为我的整个文件中没有一个反斜杠(我用ctrl-F做了一个搜索)。如果是第三,我不知道如何解决它。我尝试在pgadmin GUI中使用COPY命令,并且出现以下错误:错误:无法打开文件“/users/nathangroom/desktop/DOE_inventory5.txt”进行阅读:权限被拒绝。我在StackOverflow的其他地方看到,在命令行解释器中使用\ copy命令是该错误的解决方案。 – nathanmgroom 2014-11-05 01:52:19

+0

@nathanmgroom:你的档案在哪里? Postgres服务器在哪里?你的客户在哪里?另外,您不能随意更改分隔符。它必须是你的文件中使用的那个。这是什么?默认值是文本格式的制表符。 – 2014-11-05 02:01:16

+0

该文件在我的桌面上,我不知道postgres服务器和客户端的确切位置,但我确实知道它在我的机器上都是本地的。服务器说它是本地主机5432.我将它保存为csv后再次尝试,我得到这个错误:错误:整数无效输入语法:“Laboratory_ID”这是没有道理的,因为肯定是在该列中的整数。 – nathanmgroom 2014-11-05 02:21:28