38

我正在使用 PGAdmin 1.14.3。

当我尝试执行导入命令时:

COPY grad(country_code, postal_code, place_name, admin_name1, admin_code1, admin_name2, admin_code2, admin_name3, admin_code3, latitude, longitude, accuracy)
FROM 'C:\\Users\\denis\\Desktop\\BP2Project\\USA\\US.txt';

我得到一个

错误:无法打开文件“C:\Users\denis\Desktop\BP2Project\USA\US.txt”进行阅读:权限被拒绝 SQL 状态:42501

我确实查找了其他类似的问题,但没有一个能解决我的问题。

我以超级用户“postgres”的身份登录。我不明白为什么我缺少权限。我在 Windows 7 上。

4

9 回答 9

80

HouariFlimzy的答案中提到的权限文章 是一个很好的参考资料,但直接的答案(我使用的快速修复)是:

  • 右键单击包含权限被拒绝的数据文件的文件夹,然后单击Properties
  • 在文件夹的属性窗口中,选择安全选项卡。
  • 单击编辑按钮。
  • 在打开的“文件夹权限”窗口中,单击添加...按钮。
  • 在“输入Everyone要选择的对象名称”文本区域框中键入。
  • 单击确定,窗口将关闭。
  • 通过上一个窗口中的复选框验证默认的读取和执行权限是否设置为允许。
  • 单击确定,窗口将关闭。
  • 单击文件夹属性窗口中的应用按钮。

现在您可以运行需要访问这些文件的 SQL COPY 语句。

  • 完成后,返回文件夹的属性窗口。
  • 单击编辑按钮。
  • 在“组或用户名:”字段中选择Everyone条目。
  • 单击删除按钮。
  • 在其余打开的窗口上单击“确定”。

权限现在已经恢复到原来的样子。

于 2014-03-18T17:13:57.053 回答
13

用户Postgres必须对您要从中复制的文件具有读取权限。

查看这篇文章,了解如何在 Windows 上修改文件的安全访问权限。

于 2012-12-29T16:16:44.860 回答
10

好的,这就是 COPY 命令的工作原理,逐步将表格导出为 CSV。请注意,我使用的是 pgAdmin 111。

  1. 创建要将表导出到的目标文件夹。例如 C:\myExports
  2. 按照以下步骤设置此文件夹的读/写权限:

右键单击包含权限被拒绝的数据文件的文件夹>,然后单击属性。

在文件夹的属性窗口中,选择安全选项卡。单击编辑按钮。

在打开的“文件夹权限”窗口中,单击添加...按钮。在“输入要选择的对象名称”文本区域框中键入所有人。

单击确定,窗口将关闭。通过上一个窗口中的 >check 复选框验证默认的读取和执行权限是否设置为允许。单击确定,窗口将关闭。

单击文件夹属性窗口中的应用按钮。

  1. 这是棘手的部分,在 myExports 文件夹中创建一个具有所需名称的空白 CSV 文件。例如,employee.csv

  2. 然后像这样运行复制命令:

    将员工复制到 'C:\myExports\employee.csv' 分隔符 ',' csv;

在本例中,employee 是表名。

希望这可以帮助。

于 2015-12-17T13:50:10.657 回答
5

如果您不想向所有人授予权限,您可以为启动该服务的帐户添加权限。在控制面板 - 管理工具 - 服务中,复制“登录”选项卡中的帐户名称。(在我的系统上,该帐户称为“网络服务”。)然后与该用户共享包含 CSV 文件的文件夹,如上面的答案所示。

于 2015-07-10T08:08:50.487 回答
2

要解决此问题,您必须授予 CSV 文件权限,因为 COPY 命令中存在的 CSV 文件由服务器直接读取,而不是客户端应用程序。因此,为了让服务器可以访问这个文件,我们必须提供完全的读写权限,以便 Postgresql 用户可以读取和写入该文件。

参考:文章显示分步过程。

于 2019-08-06T17:17:29.030 回答
1

我刚刚遇到了这个错误,即使在将 postgres 添加到文件夹和文件本身的权限之后,它仍然无法正常工作。因此,我将文件放在公共文件夹中。在 Windows 上,这是路径:“C:\Users\Public\Documents\census.csv”。有效!

于 2021-01-05T20:12:14.980 回答
0

在不同线程上对这个问题的响应是这样的 1.“告诉我你使用了什么命令”2.“确保你有正确的权限”3.“只需使用 /copy”

我刚刚尝试在我试图从中复制的 cvs 文件上向所有人授予权限,但它仍然给我权限被拒绝错误。我认为此功能已损坏,并且已在多个连续版本的 Windows 上的多个连续版本中损坏。

于 2013-09-19T19:35:33.533 回答
0

对我来说,我刚刚花了很长时间。我有一个中央数据库驻留在运行 14.04 postgresql-9.5 pgAdmin3 postgis-2.2 的 HP 机器上,共享是通过 tweeked Samba 共享进行的。我的客户混合使用 Windows 10.1、7、8.1,我有一个 ubuntu 14.04 桌面。

我正在处理更新记录和规范化数据的大型表,并围绕从核心 COPY public.table_1 TO(我在 Samba 中设置的共享文件夹https:// www.youtube.com/watch?v=ndAYZ0DJ-U4 ) '/srv/samba/share/[文件名].csv'

然后,一旦使用 COPY table_1 from '/srv/samba/share/test.csv' USING DELIMITERS ',' WITH NULL AS '' CSV HEADER; 修改了表,我就可以更新数据库;来自我的任何客户。

据我所知,关键是进行更新的客户端必须是超级用户,而且一切都必须与用户相关,因为这里有 4 台服务器一起工作 Postgresql、Samba、UNIX 和 WINS 我的所有用户在每台服务器上都注册了相同的用户名和密码,同质性是主要因素。

我已经尝试了很长时间的移动并尝试了各种命名约定,但最终是http://www.postgresql.org/message-id/CFF47E56EA077241B1FFF390344B5FC10ACB1C0C@webmail.begavalley.nsw.gov.au让我明白了就像点击了一个大开关。chown 777 在您的共享和群组管理上是一个重要的学习曲线,但是,我在这方面花费的时间将获得回报......热爱 Ubuntu 热爱生活和热爱精神开源,但这可能是睡眠剥夺开始......它工作

于 2016-04-30T19:17:22.593 回答
0

我试图从 psql 14 中的文件执行 SQL 命令。这就是我可以做到的。

由于“postgres”用户与您自己的用户不同,访问被拒绝。
访问它的最简单方法是,将您尝试访问的文件保留在 Windows 的 C:\Users\Public 或 Linux 发行版中的 \tmp 文件夹中。所有用户都可以访问这些文件夹。

从这个答案的原始来源阅读

于 2022-02-25T14:22:54.937 回答