我在Windows 7 32位机器上使用EnterpriseDB pgAdmin III(1.12.1版),在远程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/,但也没有效果。
有什么想法吗?
问题是通过目录对文件的访问权限。例如,Postgres用户无法访问您的主文件夹。答案是使用一个所有用户都可以访问的文件夹,比如/tmp,或者创建一个具有正确权限的文件夹,这样任何用户都可以在那里访问/读/写,这是一种用户共享文件夹。
我认为您的postgres用户仍然无法访问您的文件。
你试过以下命令了吗?
chown postgres/var/lib/pgsql/data/file.csv
chmod u+r/var/lib/pgsql/data/file.csv
Try COPY table_name FROM '/var/lib/pgsql/data/file.csv'
WITH DELIMITER AS ',' csv header
请注意复制前的反斜杠,当您使用反斜杠运行它时,它会使用用户权限运行,否则它只会以邮局主管的身份运行,在文档中,对于最新版本的pg,这是不赞成的:|,无论如何,这可能会对您有用。