6

这是我的问题:

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

感谢您的帮助。

4

2 回答 2

12

如果您在 windows 中工作,您只需传递由单引号包裹的整个路径。

test-# \i 'D:\\person.sql' --- > note here double backslash not single
于 2020-08-08T11:11:23.463 回答
6

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

chmod a+r create.sql

您可以通过更改您的umask;来更改分配给文件的默认权限。搜索更多信息。一些程序相当烦人地忽略umask并设置限制性文件权限,所以你总是需要知道如何授予权限。见man chmodman chown

顺便说一句,您正在使用一种非常复杂的方法来psqlpostgres用户身份启动。这会做得很好:

sudo -u postgres psql template1

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

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

template1=# \i create.sql

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

template1=# \i Desktop/create.sql
于 2012-12-03T12:07:44.753 回答