如何在SQL中将数据从文件复制到表?

时间:2013-12-08 22:25:03

标签: postgresql

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

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

我使用以下查询:

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

但得到错误“权限被拒绝”。

文件未锁定。那你怎么解决这个问题呢?或者除了INSERT INTO ... VALUE();之外还有其他更快捷的方法将数据从文件复制到表格吗?

1 个答案:

答案 0 :(得分:0)

COPY使用PostgreSQL服务器后端打开文件,因此它要求用户postgresql在具有读取权限的情况下运行(对于COPY FROM )对于有问题的文件。它还需要与INSERT相同的SQL级访问权限,但我怀疑它的文件权限让你在这里。

很可能postgrespostgres_(取决于您安装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并确保它具有组读取权限,或使其具有世界可读性。