PostgreSQL - 不一致的COPY权限错误

时间:2012-02-13 15:46:15

标签: permissions pgadmin postgresql-8.4

我在Windows 7,32位计算机上使用EnterpriseDB pgAdmin III(v.1.12.2)在远程Linux服务器上使用PostgreSQL数据库。我以用户postgres身份登录,这允许我访问$ PGDATA目录(在这个例子中,它可以在这里找到:/ var / lib / pgsql / data /)

如果我通过终端登录服务器,运行psql,并使用\copy命令将csv文件中的数据导入新创建的表中,我没有问题。

但是,如果我在pgAdmin中,我使用COPY命令将数据从csv文件导入到新创建的表中。

COPY table_name FROM '/var/lib/pgsql/data/file.csv' 
WITH DELIMITER AS ',' csv header

有时候这样可以正常工作,有时我会收到权限错误:

  

错误:无法打开文件'/var/lib/pgsql/data/file.csv“进行阅读:权限被拒绝   SQL状态:42501

错误的不一致让我感到困惑。出现错误时,我将文件权限更改为644 - 777之间的任何位置,但不起作用。我也尝试将文件移动到其他文件夹,例如var / tmp /,也没有效果。

有什么想法吗?

3 个答案:

答案 0 :(得分:5)

问题是通过目录到文件的访问权限。例如,Postgres用户无权访问您的主文件夹。答案是使用所有用户都有访问权限的文件夹,如/ tmp,或创建一个具有正确权限的文件夹,以便任何用户都可以访问/读取/写入一种用户共享文件夹。

答案 1 :(得分:0)

我认为您的postgres用户仍然无权访问您的文件。

您是否尝试过以下命令?

chown postgres /var/lib/pgsql/data/file.csv

chmod u + r /var/lib/pgsql/data/file.csv

答案 2 :(得分:0)

Try \COPY table_name FROM '/var/lib/pgsql/data/file.csv' 
WITH DELIMITER AS ',' csv header

请注意复制前的反斜杠,当您使用反斜杠运行时,它使用用户权限运行,否则它只是作为 postmaster 运行,在文档中对于最近版本的pg :| ,已弃用,无论如何,这可能对你来说很有用。