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