3

我在 Windows 7 32 位机器上使用 EnterpriseDB pgAdmin III (v. 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/,也没有任何效果。

有任何想法吗?

4

3 回答 3

5

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

于 2012-07-20T15:51:01.580 回答
0

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

您是否尝试过以下命令?

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

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

于 2012-02-14T10:11:59.740 回答
0
Try \COPY table_name FROM '/var/lib/pgsql/data/file.csv' 
WITH DELIMITER AS ',' csv header

请注意复制前的反斜杠,当您使用反斜杠运行它时,它会以用户权限运行,否则它只是作为postmaster运行,在文档中不推荐使用最新版本的 pg :| ,无论如何,这可能对你有用。

于 2012-11-29T15:30:23.973 回答