如何在SQL中将数据从文件复制到表中?我在Macbook上使用pgAdmin3。
表名是tutor,文件名是tutor.rtf。
我使用以下查询:
COPY tutor
FROM /Users/.../tutor.rtf
WITH DELIMITER ',';
但得到错误“权限被拒绝”。
文件未锁定。那你怎么解决这个问题呢?或者除了INSERT INTO ... VALUE();
之外还有其他更快捷的方法将数据从文件复制到表格吗?
答案 0 :(得分:0)
COPY
使用PostgreSQL服务器后端打开文件,因此它要求用户postgresql在具有读取权限的情况下运行(对于COPY FROM
)对于有问题的文件。它还需要与INSERT
相同的SQL级访问权限,但我怀疑它的文件权限让你在这里。
很可能postgres
或postgres_
(取决于您安装PostgreSQL的方式)用户没有/Users/somepath/tutor.rtf
或该文件的某个父目录的读取权限。
最简单的解决方案是使用psql
的{{1}}命令,该命令使用客户端权限读取文件,而不是服务器的权限,并使用路径相对于客户端的当前工作目录。 PgAdmin-III中没有此命令。
较新的PgAdmin-III版本在表格上下文菜单中有 Import 命令。见importing tables from file in the PgAdmin-III docs。这相当于\copy
的{{1}}命令,读取具有PgAdmin-III应用程序访问权限的文件。
或者,您可以使用服务器端psql
命令,确保\copy
向上COPY
的每个目录都具有世界执行权限 - 这意味着用户可以遍历它,进入,等,但不能在没有/Users
权限的情况下列出其内容。然后将文件设置为组somepath
并确保它具有组读取权限,或使其具有世界可读性。