这是我的问题:
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
感谢您的帮助。
答案 0 :(得分:4)
问题是您已经以用户psql
启动了postgres
,并且您没有授予postgres
用户读取SQL文件的权限。你需要给它许可。最简单的方法是授予世界阅读权:
chmod a+r create.sql
您可以通过更改umask
来更改分配给文件的默认权限。搜索更多信息。有些程序相当恼人地忽略了umask
并设置了限制性文件权限,因此您始终需要知道如何授予权限。请参阅man chmod
和man 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