CKANインストールドキュメント は、インストールされたPostgreSQLデータベースを一覧表示する方法を示しています。
コマンドは次のようになります。
Sudo -u postgres psql -l
シェルでそれを試すと、エラーが発生します。
$ Sudo -u postgres psql -l
Sudo: psql: command not found
CentOSフォーラム のDaniel2d2artは、psqlへのパスを完全に修飾することで問題を回避しました。
私のpsqlは/usr/pgsql-9.2/bin
ディレクトリにあるため、回避策は次のようになります。
Sudo -u postgres /usr/pgsql-9.2/bin/psql -l
私のシェルでそれを試すと、うまくいきます:
$ 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には、secure_path
ファイル内の/etc/sudoers
変数で定義された独自のパスがあります。
この場合、echo $PATH
の出力は誤解を招く可能性があります。 Sudoが実際に使用するパスを確認するには、代わりにprintenv PATH
を使用します。私の場合、出力は次のようになります。
$ Sudo -u postgres printenv PATH
/sbin:/bin:/usr/sbin:/usr/bin
出力には、psqlが存在する/usr/pgsql-9.2/bin
が含まれていないため、Sudoのパスにもありません。
この問題を修正するには、psqlが存在する場所をsecure_path
変数に追加します。
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 に関する同様の問題の解決策を教えてくれました。
小さな回避策-コマンドの実行に問題がない場合は、ユーザーを切り替えることができます
Sudo su postgres
その後
psql -l
うまくいくはずです。