这是我的问题:
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
谢谢你的帮助
5条答案
按热度按时间mklgxw1f1#
如果你在windows中工作,你只需要传递用单引号括起来的整个路径。
tjvv9vkg2#
问题是您已经以用户
postgres
的身份启动了psql
,但是您没有授予postgres
用户读取SQL文件的权限。你需要给予它许可。最简单的方法是授予世界阅读权:您可以通过更改
umask
来更改分配给文件的默认权限;搜索更多信息。有些程序忽略了umask
并设置了限制性文件权限,所以你总是需要知道如何授予权限。参见man chmod
和man chown
。顺便说一句,您使用了一种非常复杂的方法来启动
psql
作为postgres
用户。这样就行了请注意,
/create.sql
在文件系统的根目录中指定了一个名为create.sql
的文件(/
)。我怀疑这是你的本意。如果它在你的主目录中,你可能想把它指定为一个相对路径(不带前导的
/
),比如:或者如果它在桌面上,并且您已经在主目录中启动了
psql
:kcwpcxri3#
编辑:如果你在linux上,一个更好的解决方案是将SQL文件移动到tmp文件夹!
我在Linux上遇到了同样的问题,但公认的解决方案在我的情况下是不够的。我最终意识到,你需要确保路径中的每个文件夹都有正确的权限。
例如,如果主文件夹没有正确的权限,则您为SQL文件夹中的文件授予什么权限都无关紧要。
yh2wf1be4#
如果在加上引号后遇到同样问题,则使用正斜杠表示路径
jm81lzqq5#
权限问题可以通过改变每个子目录的权限来解决。
这应该可以解决问题。
P.S.可能存在安全风险,因为这些文件的权限设置为其他人读取和执行