2013-12-08 36 views
0

如何将数据从文件复制到SQL中的表中?我在Macbook上使用pgAdmin3。如何在SQL中将数据从文件复制到表中?

表名是tutor,文件名是tutor.rtf。

我用下面的查询:?

COPY tutor 
FROM /Users/.../tutor.rtf 
WITH DELIMITER ','; 

,但得到的错误拒绝“权限”

该文件没有锁定那么,你如何解决这个问题,或者有没有其他的更快办法从文件中的数据复制到表除了INSERT INTO ... VALUE();

+0

我的膝盖反应反应是说:“请发布'ls -l/Users /.../ tutor.rtf'的结果,这样我们都可以看到文件具有适当的权限(因为你说的文件没有锁定)“第二次看,你有一个点太多了吗?或者你是否为了简洁而省略了完整的路径?如果您对此帖子进行了更改,我会请求您粘贴原始路径。 –

回答

0

COPY使用PostgreSQL服务器后端打开文件,所以它需要用户postgresql的运行方式为对该文件具有读权限(针对COPY FROM)。它还需要与INSERT表相同的SQL级别访问权限,但我怀疑它的文件许可权是让你在这里。

最可能的是postgrespostgres_(取决于您安装PostgreSQL的方式)用户不具有对/Users/somepath/tutor.rtf或该文件的某个父目录的读访问权限。

最简单的解决方法是使用psql\copy命令,使用客户权限,而不是那些服务器读取该文件,并使用相对于客户端的当前工作目录的路径。该命令在PgAdmin-III中不可用。

较新的PgAdmin-III版本在表格上下文菜单中有导入命令。请参阅importing tables from file in the PgAdmin-III docs。这相当于psql\copy命令,读取具有PgAdmin-III应用程序访问权限的文件。

或者您可以通过确保每个目录从/Users使用服务器端COPY命令,直至somepath拥有世界执行权限 - 这意味着用户可以遍历它,进入这个目录,等等,但没有r无法列出其内容权利也是。然后将文件设置为组postgres,并确保它具有组读取权限,或使其具有世界可读性。

相关问题