使用\i命令从文件阅读时拒绝PostgreSQL权限

pdkcd3nj  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(5)|浏览(213)

这是我的问题:

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
谢谢你的帮助

mklgxw1f

mklgxw1f1#

如果你在windows中工作,你只需要传递用单引号括起来的整个路径。

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

tjvv9vkg2#

问题是您已经以用户postgres的身份启动了psql,但是您没有授予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
kcwpcxri

kcwpcxri3#

编辑:如果你在linux上,一个更好的解决方案是将SQL文件移动到tmp文件夹!
我在Linux上遇到了同样的问题,但公认的解决方案在我的情况下是不够的。我最终意识到,你需要确保路径中的每个文件夹都有正确的权限。
例如,如果主文件夹没有正确的权限,则您为SQL文件夹中的文件授予什么权限都无关紧要。

/home/username/Documents/SQL
yh2wf1be

yh2wf1be4#

如果在加上引号后遇到同样问题,则使用正斜杠表示路径

jm81lzqq

jm81lzqq5#

权限问题可以通过改变每个子目录的权限来解决。

chmod og+rX /home /home/user

这应该可以解决问题。
P.S.可能存在安全风险,因为这些文件的权限设置为其他人读取和执行

相关问题