2012-12-29 87 views
22

我正在使用PGAdmin 1.14.3。尝试从PGAdmin导入CSV文件时,权限被拒绝

当我尝试执行导入命令:

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'; 

我得到一个

ERROR: could not open file "C:\Users\denis\Desktop\BP2Project\USA\US.txt" for reading: Permission denied SQL state: 42501

我也查找其他similar问题,其中没有解决我的问题。

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

回答

7

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

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

+0

那么我如何设置postgres权限呢? – Tool

+2

@Tool:* system用户*“postgres”需要文件系统中的权限。不要与*数据库用户*“postgres”混淆。我们正在谈论的是* server *本地文件,对吧?如果没有,你不能这样使用SQL'COPY'。在这种情况下查找[psql元命令'\ copy'](http://www.postgresql.org/docs/current/interactive/app-psql.html)。 –

+0

我使用cygwin的psql。在我的Windows机器上找不到Postgres或postgres用户... – Cromax

0

回应在不同的线程这个问题去这样的事情 1.“告诉我到底是什么命令你用” 2.“请确保您有正确的权限” 3.“只要使用/复制”

我刚刚尝试给每个人的权限,我试图复制CVS文件,它仍然给我权限被拒绝的错误。我认为这个功能已经被破坏,并且已经在多个连续版本的Windows上连续发布多个版本。

+0

第二次看,将用户权限设置为'Evereyone'似乎有一些效果。 – Alex

40

通过HouariFlimzyanswer提到的permissions article是一个很好的参考材料,而是直接的答案(快速修复我使用)是:

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

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

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

权限现在已经返回到它们的状态。

+0

**注意:**我按照Windows 2008 R2的这些步骤操作。 – Kevin

+1

这应该是被接受的答案,如果您要从PG复制数据,请不要忘记检查“写入”框。 – JLB

2

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

5

好吧,这是如何让COPY命令工作,将表格导出为CSV,一步一步来。 请注意,我使用pgAdmin的111

  1. 创建要表导出到目标文件夹。例如C:\ myExports
  2. 设置下列步骤,该文件夹上的读/写权限:

Right click the folder containing the data file(s) that permission was denied >to and then click Properties.

In the Folder's Properties window, select the Security tab. Click the Edit button.

In the "Permissions for the folder" window that opened, click the Add... button. Type Everyone into the "Enter the object names to select" text area box.

Click OK and the window will close. Verify that the default Read & Execute permissions were set to Allow via the >check checkbox in the previous window. Click OK and the window will close.

Click the Apply button in the Folder Properties window.

  • 这是棘手的部分,内部myExports夹创建一个空白CSV文件与您的期望name.Eg employee.csv

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

    copy employee to 'C:\myExports\employee.csv' delimiter ',' csv;

  • 员工是这个例子中的表名。

    希望这会有所帮助。

    +0

    **注意**对于我来说,在更改权限时,我必须检查所有框(“完全控制”,“修改”...)才能使用! – DrMisha

    0

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

    我正在处理大表更新记录和规范化数据,并且已经构建了从CSV文件中创建的例程,这些CSV文件是由核心COPY public.table_1 TO(我在Samba中设置的共享文件夹https://www.youtube.com/watch?v=ndAYZ0DJ-U4)'/srv/samba/share/[filename].csv'

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

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

    我已经尝试了很长一段时间移动的事情,并尝试各种命名约定,但最终它是http://www.postgresql.org/message-id/[email protected]gov.au,我把它排序,它就像一个大开关点击。您的股票和集团管理chown 777是一个重要的学习曲线,但是,我花在这些上的时间将会收获回报......爱好Ubuntu爱生活,热爱开源的精神,但这可能是睡眠剥夺踢...... IT作品

    相关问题