尝试从PGAdmin导入CSV文件时权限被拒绝

时间:2012-12-29 15:51:45

标签: windows postgresql csv

我正在使用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

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

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

8 个答案:

答案 0 :(得分:55)

permissions article answerHouari中提及的Flimzy是一个很好的参考资料,但直接答案(我使用的快速修复)是:

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

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

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

现在已将权限恢复为原来的状态。

答案 1 :(得分:8)

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

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

答案 2 :(得分:8)

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

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

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

         

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

         

    在"文件夹的权限"打开的窗口,单击添加...按钮。   在屏幕中输入所有人,然后输入对象名称以选择"文字区域框。

         

    单击“确定”,窗口将关闭。   验证默认的Read&通过上一个窗口中的>检查复选框将执行权限设置为允许。   单击“确定”,窗口将关闭。

         

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

    1. 这是一个棘手的部分,在myExports文件夹中创建一个包含所需名称的空白CSV文件.E.g employee.csv

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

        

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

    3. employee是此示例中的表名。

      希望这有帮助。

答案 3 :(得分:2)

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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

我只是尝试在我尝试复制的cvs文件上向Everyone授予权限,但它仍然给我许可拒绝错误。我认为这个功能已被打破,并且已经在多个连续版本的Windows上连续多次发布。

答案 6 :(得分:0)

对我而言,我刚刚花了很长时间才完成这件事。 我有一个中央数据库驻留在运行14.04 postgresql-9.5 pgAdmin3 postgis-2.2的HP盒子上,共享是通过一个推特的Samba共享。我的客户正在混合使用windows 10.1,7,8.1,我有一个ubuntu 14.04桌面。

我正在处理更新记录和规范化数据的大型表,并且已经从CSV文件构建了SQL副本语句的例程,这些文件是从核心COPY public.table_1 TO(我在Samba中设置的共享文件夹){ {3}})'/ srv / samba / share / [filename] .csv'

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

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

我已经尝试了很长时间,并尝试了各种命名约定,但最终它是https://www.youtube.com/watch?v=ndAYZ0DJ-U4让我感到厌烦就像是一个大开关点击。在你的股票和集团管理上已知777这是一个重要的学习曲线,但是,我花在这上面的时间将获得奖励......热爱Ubuntu热爱生活,热爱开源精神,但这可能只是睡眠剥夺... ...

答案 7 :(得分:0)

要解决此问题,您必须授予CSV文件权限,因为COPY命令中存在的CSV文件由服务器(而不是客户端应用程序)直接读取。因此,要使该文件可被服务器访问,我们必须给予完全的读写许可,以便Postgresql用户可以对该文件进行读写。

参考:article显示了分步过程。