我在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 /,也没有效果。
有什么想法吗?
答案 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 :| ,已弃用,无论如何,这可能对你来说很有用。