Postgresql - 无法将csv文件加载到表中

时间:2015-03-08 01:54:06

标签: sql postgresql csv import copy

我试图将几个csv文件加载到几个postgresql表中,但它们都没有工作并产生各种错误。

这些文件是公开的,位于此处:

http://www.kaggle.com/c/march-machine-learning-mania-2015/data

我在Windows 8计算机上使用pgAdmin版本1.20.0和psql 9.4.0。

以下是我迄今为止尝试过的事情:

我使用pgAdmin并可以创建架构和表格。

然后我右键单击表格,打开导入工具,选择文件,将格式设置为csv,单击标题复选框,将分隔符设置为','并点击“导入”,然后收到上一个预期列后有额外数据的错误。

接下来,我尝试使用命令行:

copy marchmad.regular_season_compact_results FROM 'C:/data/regular_season_compact_results.csv' CSV HEADER delimiter ',' null '\N';

并收到此错误消息:

ERROR: could not open file "C:/data/regular_season_compact_results.csv" for reading: Permission denied
SQL state: 42501

接下来,我尝试将一个' \'在这样的前面:

\copy marchmad.regular_season_compact_results FROM 'C:/data/regular_season_compact_results.csv' CSV HEADER delimiter ',' null '\N';

并收到此错误消息:

ERROR: syntax error at or near "\"
SQL state: 42601
Character: 1

有关如何使这项工作的任何建议?

3 个答案:

答案 0 :(得分:2)

在文件regular_season_compact_results.csv的末尾,有一个空行。这可能是给你错误的问题。

答案 1 :(得分:2)

pgAdmin 中,您只能使用copy,这是服务器端 SQL 命令,因此该文件的权限来自服务器角度,即使服务器位于 localhost

您从该命令获得的错误表明 Postgres 服务器无权访问 CSV 文件。可能是您正在以另一个用户身份运行服务器,例如 postgres ,并且无法访问CSV。如果您调整权限,以便服务器正在运行的用户可以访问 CSV 文件及其所在的目录,我希望它能够正常工作。

\copy命令不起作用,因为这是在 psql 终端中可用的特殊 psql 命令。由于它在客户端方面运行,因此通常会在您的用户下运行。因此,它可能与下载 CSV 的用户相同,因此可以访问。

如果您想以这种方式尝试,可以尝试使用psql终端。一般来说,我更喜欢使用 psql 来处理复制文件,因为它总是以文件/权限的方式集中在本地,因此我可以轻松地将文件复制到远程服务器而无需关心特殊访问服务器的文件系统。

答案 2 :(得分:0)

您要导入的文件需要权限,为此请从属性转到安全部分,然后在白色文本部分中单击添加写“所有人” 确保选中读取和执行复选框!