PostgreSQL - 不一致的复制权限错误

发布于 2025-01-05 05:56:57 字数 671 浏览 0 评论 0原文

我在 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/,也没有效果。

有什么想法吗?

I am using the EnterpriseDB pgAdmin III (v. 1.12.1) on a Windows 7, 32-bit machine to work with PostgreSQL databases on a remote Linux server. I am logged in as the user postgres, which allows me to access the $PGDATA directory (in this instance, it is found here: /var/lib/pgsql/data/)

If I log into the server via a terminal, run psql, and use the \copy command to import data from csv files into newly created tables, I have no problems.

If I'm in pgAdmin, however, I use the COPY command to import data from csv files into newly created tables.

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

Sometimes this works fine, other times I get a permissions error:

ERROR: could not open file '/var/lib/pgsql/data/file.csv" for reading: Permission denied
SQL state: 42501

It is the inconsistency of the error that is confusing to me. When the error arises, I change the file permission to anywhere from 644 - 777, with no effect. I also try moving the file to other folders, e.g., var/tmp/, also with no effect.

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

夏雨凉 2025-01-12 05:56:57

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

The problem is the access permissions trough the directories to the file. Postgres user does not have access to your home folder, for example. The answer is to use a folder all users have access like /tmp, or create one with the correct permissions so any user can access/read/write there, a sort of users shared folder.

九局 2025-01-12 05:56:57

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

您尝试过以下命令吗?

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

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

I think your postgres user still don't have access to your file.

Did you tried the folowing commands ?

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

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

爱冒险 2025-01-12 05:56:57
Try \COPY table_name FROM '/var/lib/pgsql/data/file.csv' 
WITH DELIMITER AS ',' csv header

请注意复制之前的反斜杠,当您使用反斜杠运行它时,它会以 user 权限运行,否则它只会以 postmaster 身份运行,这在文档中已被弃用对于最新版本的 pg :| 来说,无论如何这可能对你有用。

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

Notice the backslash before copy, when you run it with back slash it runs with user permissions other wise it just runs as postmaster which in the documentation is deprecated for recent versions of pg :|, anyways this might probably do the trick for ya .

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文