Postgresql-can';t将csv文件加载到表中

Postgresql-can';t将csv文件加载到表中,sql,postgresql,csv,import,copy,Sql,Postgresql,Csv,Import,Copy,我正在尝试将一些csv文件加载到几个postgresql表中,但没有一个可以正常工作并生成各种错误 这些文件是公共文件,位于以下位置: 我在Windows8机器上使用PgadminVersion1.20.0和PSQL9.4.0 以下是我迄今为止尝试过的一些方法: 我使用pgAdmin,可以创建模式和表 然后,我右键单击表格,打开导入工具,选择文件,将格式设置为csv,单击标题复选框,将分隔符设置为“”,然后单击“导入”,得到一个错误,即在最后一个预期列之后有额外数据 接下来,我尝试使用命令行执

我正在尝试将一些csv文件加载到几个postgresql表中,但没有一个可以正常工作并生成各种错误

这些文件是公共文件,位于以下位置:

我在Windows8机器上使用PgadminVersion1.20.0和PSQL9.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
ERROR: syntax error at or near "\"
SQL state: 42601
Character: 1
接下来,我尝试在前面加一个“\”,如下所示:

\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
ERROR: syntax error at or near "\"
SQL state: 42601
Character: 1

关于如何进行此项工作,您有什么建议吗?

在文件regular\u season\u compact\u results.csv的末尾,有一个空行。这可能是出现错误的原因。

在pgAdmin中,您只能使用
copy
,这是一个服务器端SQL命令,因此,即使服务器位于本地主机上,文件的权限也来自服务器的角度

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

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


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

在pdAdmin中,您是否查看了“要导入的列”选项卡以确保csv数据中的列数与您创建的表中的列数相同?您创建的列是否与csv(类型和位置)对齐?@ivan7707:刚刚意识到我需要在使用导入工具之前定义列。假设它类似于sql server导入向导,可以为我处理列定义。我尝试删除最后一行,但仍然存在相同的问题。如果可以,请发布表结构。这可能没问题,但像我这样的调试器喜欢看到我们能看到的一切。我会制作一个临时文件,只包含头和部分数据。它可能有意义,也可能没有。然后添加更多的数据。我们的想法是找出是哪一行数据导致了问题。