使用\ i命令从文件读取时,postgreSQL权限被拒绝

时间:2012-12-03 11:55:55

标签: postgresql

这是我的问题:

myname@ubuntu:~$ sudo su postgres -c "psql template1"
Password: 
psql (9.1.6)
Type "help" for help.

template1=# \i /create.sql
/create.sql: Permission denied

即使文件在桌面上,我也遇到此问题。 当我复制create.sql的文本并将其粘贴在那里时,它可以工作。

使用UBUNTU 12.10,postgresql 9.1

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

问题是您已经以用户psql启动了postgres,并且您没有授予postgres用户读取SQL文件的权限。你需要给它许可。最简单的方法是授予世界阅读权:

chmod a+r create.sql

您可以通过更改umask来更改分配给文件的默认权限。搜索更多信息。有些程序相当恼人地忽略了umask并设置了限制性文件权限,因此您始终需要知道如何授予权限。请参阅man chmodman chown

顺便说一句,您使用了一种非常复杂的方法来启动psql postgres用户。这样做会很好:

sudo -u postgres psql template1

请注意,/create.sql指定文件系统(create.sql)根目录中名为/的文件。我怀疑这是你的意图。

如果它位于您的主目录中,您可能希望将其指定为相对路径(不带前导/),例如:

template1=# \i create.sql

或者如果它在桌面上并且您已在主目录中启动psql

template1=# \i Desktop/create.sql

答案 1 :(得分:4)

如果您在Windows中工作,则只需传递用单引号引起来的整个路径。

test-# \i 'D:\\person.sql' --- > note here double backslash not single