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)
我该如何正确修复?
我不应该完全符合这条道路,对吗?
postgres用户的路径中已经有psql:
$sudo -u postgres echo $PATH /usr/pgsql-9.2/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin
我该如何正确解决这个问题?
sudo不使用用户的路径或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为我提供类似问题的解决方案.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。