Postgresql 如何在SQL中将数据从文件复制到表?
如何在SQL中将数据从文件复制到表中?我在Macbook上使用pgAdmin3 表名为tutor,文件名为tutor.rtf 我使用以下查询:Postgresql 如何在SQL中将数据从文件复制到表?,postgresql,Postgresql,如何在SQL中将数据从文件复制到表中?我在Macbook上使用pgAdmin3 表名为tutor,文件名为tutor.rtf 我使用以下查询: COPY tutor FROM /Users/.../tutor.rtf WITH DELIMITER ','; 但出现错误“权限被拒绝” 文件未锁定。那么如何解决此问题?或者是否有其他更快的方法将数据从文件复制到表,除了插入到…VALUE();?复制使用PostgreSQL server后端打开文件,因此它要求用户PostgreSQL以具有读取权限的
COPY tutor
FROM /Users/.../tutor.rtf
WITH DELIMITER ',';
但出现错误“权限被拒绝”
文件未锁定。那么如何解决此问题?或者是否有其他更快的方法将数据从文件复制到表,除了
插入到…VALUE();
?复制
使用PostgreSQL server后端打开文件,因此它要求用户PostgreSQL以具有读取权限的方式运行(对于COPY FROM
)用于所讨论的文件。它还需要与INSERT
相同的SQL级别的表访问权限,但我怀疑是文件权限让您来到了这里
最有可能的是postgres
或postgres\uu
(取决于您安装PostgreSQL的方式)用户没有对该文件的/Users/somepath/tutor.rtf
或某个父目录的读取权限
最简单的解决方案是使用psql
的\copy
命令,该命令使用客户端权限而不是服务器权限读取文件,并使用相对于客户端当前工作目录的路径。此命令在PgAdmin-III中不可用
较新的PgAdmin III版本在表格上下文菜单中具有导入命令。请参阅。这相当于psql
的\copy
命令,读取具有PgAdmin III应用程序访问权限的文件
或者,您可以使用服务器端的
COPY
命令,确保/Users
upsomepath
中的每个目录都具有世界执行权限,这意味着用户可以遍历它、将cd放入其中等,但也不能在没有r
权限的情况下列出它的内容。然后将文件设置为grouppostgres
和m确保它具有组读权限,或使其具有全球可读性。我下意识的反应是说“请发布ls-l/Users/../tutor.rtf的结果,以便我们都能看到该文件具有适当的权限。(因为你说该文件未锁定)“再看看,你是不是有一个太多的点在那里?还是你只是为了简洁而省略了完整的路径?如果你为这篇文章更改了原始路径,我会要求你粘贴它。