错误:在psql中使用\ copy时缺少列的数据

nat*_*oom 15 postgresql psql postgresql-copy

我正在尝试将.txt文件导入PostgreSQL.txt文件有6列:

Laboratory_Name Laboratory_ID   Facility    ZIP_Code     City   State
Run Code Online (Sandbox Code Playgroud)

213行.

我正在尝试使用此命令\copy将此文件的内容放入doe2PostgreSQL 中调用的表中:

\copy DOE2 FROM '/users/nathangroom/desktop/DOE_inventory5.txt' (DELIMITER(' '))
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误:

missing data for column "facility"
Run Code Online (Sandbox Code Playgroud)

当我遇到这个错误并没有任何帮助时,我已经四处寻找该怎么做了.有人遇到过这种情况么?

Erw*_*ter 5

三个可能的原因:

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

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

    \可以在COPY数据中使用反斜杠字符()来引用可能被视为行或列分隔符的数据字符.

从具有匹配布局的表中读取时,输出COPY TO或pg_dump不显示任何这些错误.但也许您的文件已被编辑或来自不同的错误来源?

  1. 您没有使用您认为正在使用的文件.\copypsql命令行界面的元命令是一个包装器,用于COPY读取客户端本地的文件.如果您的文件位于服务器上,请改用SQL命令COPY.

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

Nag*_*gev 5

仔细检查文件。就我而言,文件末尾的空行导致了ERROR: missing data for column. 删除了,效果很好。

打印空行可能会揭示一些有趣的事情:

cat -e $filename
Run Code Online (Sandbox Code Playgroud)