问题
CKAN installation documentation向您展示了如何列出已安装的Postgresql数据库.
该命令如下所示:
sudo -u postgres psql -l
当我在我的shell中尝试它时,我收到一个错误:
$sudo -u postgres psql -l sudo: psql: command not found
CentOS forum上的Daniel2d2art通过完全限定psql的路径解决了这个问题.
我的psql位于/usr/pgsql-9.2/bin目录中,所以我的解决方法现在看起来像这样:
sudo -u postgres /usr/pgsql-9.2/bin/psql -l
当我在我的shell中尝试它时,它可以工作:
$sudo -u postgres /usr/pgsql-9.2/bin/psql -l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges --------------+----------+----------+-------------+-------------+----------------------- postgis_test | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (4 rows)
我该如何正确修复?
我不应该完全符合这条道路,对吗?
$sudo -u postgres echo $PATH /usr/pgsql-9.2/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin
我该如何正确解决这个问题?
为什么sudo忽略了你的道路
原文链接:https://www.f2er.com/centos/373560.htmlsudo不使用用户的路径或postgres用户的路径. sudo有自己的路径,由文件/ etc / sudoers中的secure_path变量定义.
在这种情况下,echo $PATH的输出会产生误导.要查看sudo真正使用的路径,请使用printenv PATH.就我而言,输出看起来像这样:
$sudo -u postgres printenv PATH /sbin:/bin:/usr/sbin:/usr/bin
输出不包含/usr/pgsql-9.2/bin,其中psql存在,因此它也不在sudo的路径中.
要解决此问题,您可以将psql所在的位置添加到secure_path变量中.
如何告诉sudo psql所在的位置
使用sudo visudo在vi中打开/ etc / sudoers.
该文件应包含如下所示的行:
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
该行设置sudo的路径.等号后面的部分与前一个printenv PATH示例的输出相同.
替换为这样的东西:
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/pgsql-9.2/bin
替换将/usr/pgsql-9.2/bin附加到路径列表.路径列表分隔符是冒号(:).
要检查它是否有效,请再次尝试printenv PATH命令:
$sudo -u postgres printenv PATH /sbin:/bin:/usr/sbin:/usr/bin:/usr/pgsql-9.2/bin
看起来不错!
现在尝试psql -l命令:
$sudo -u postgres psql -l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges --------------+----------+----------+-------------+-------------+----------------------- postgis_test | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (4 rows)
有用!
感谢Drew Khoury在Super User为我提供类似问题的解决方案.