PostgreSQL

pg_ctlコマンド

pg_ctlコマンドはPostgreSQLサーバの起動、停止、を制御したりクラスタの作成などを行うコマンドですが、Linux環境での通常インストール(yum)した場合、pathが通っていない事によって動作しないとおもいます。(正確にはlinux のaletrnativesの対象にされていない事によるものです)通常pg_ctlはpsqlコマンド等と同じく以下フォルダにインストールされていますので自身でpathを通すことになります。(なおこのコマンドはPostgreSQLのスーパーユーザである”postgres”ユーザでのみ実行可能です)

#  xxはメジャーバージョン番号
/usr/pgsql-xx/bin

このあたりの事が「PostgreSQL情報ポータルサイト」には以下のように記載されていました。

なお、全ての実行ファイルがalternativesの対象ではありません。具体的には、pg_ctlとinitdbが除外されています。おそらく、この2つのコマンドはinitスクリプト(“/etc/init.d/postgesql-9.0など”)で実行されるためでしょう。実際、initスクリプトではPGENGINEという変数でバージョン別のディレクトリ配下のpg_ctlなどを指定しています。手動でpg_ctlやinitdbを使っている方は、PATHを指定しておくことをお勧めします。参考までに、aletrnativesで対応しているコマンドを下記に示します。

https://lets.postgresql.jp/documents/tutorial/new_rpm

psqlコマンドはインストールの際に/usr/bin/配下にシンボリックリンクが作成される事でpathが通り利用できるようになるのですが、pg_ctlはこのシンボリックリンクが作成されずfull path指定でないと実行できないようです。以下は当方の環境でpathが通るようにシンボリックリンクを作成した際のものです。

# ln -s /usr/pgsql-14/bin/pg_ctl /usr/bin/pg_ctl
# ls -lt /usr/bin/pg_ctl
lrwxrwxrwx 1 root root 24  2月 21 21:21 /usr/bin/pg_ctl -> /usr/pgsql-14/bin/pg_ctl
# which pg_ctl
/usr/bin/pg_ctl
参考までにpsqlコマンドなどはalternativesフォルダ配下のシンボリックリンク経由で
/usr/bin配下にシンボリックリンクが作成されています。
# ls -l /usr/bin/psql | grep psql
lrwxrwxrwx 1 root root 28 11月 17 11:16 /usr/bin/psql -> /etc/alternatives/pgsql-psql

利用例

サービスの状態確認
-- -D で指定しているのはデータベースファイルが存在するシステム上のディレクトリです
--
-bash-4.2$ pg_ctl status -D /var/lib/pgsql/14/data
pg_ctl: サーバーが動作中です(PID: 1875)
/usr/pgsql-14/bin/postgres "-D" "/var/lib/pgsql/14/data/"
-bash-4.2$
-- -D オプションを省略した場合 PGDATA環境変数でしていされているフォルダを対象とします
--
-bash-4.2$ env | grep PGDATA
PGDATA=/var/lib/pgsql/14/data
-bash-4.2$ pg_ctl status
pg_ctl: サーバーが動作中です(PID: 1875)
/usr/pgsql-14/bin/postgres "-D" "/var/lib/pgsql/14/data/"
-bash-4.2$
サービスの再起動
-bash-4.2$ pg_ctl restart
サーバー停止処理の完了を待っています....完了
サーバーは停止しました
サーバーの起動完了を待っています....[2023-02-21 22:50:13 JST][3657][63f5d745.e49-1][0]LOG:  redirecting log output to logging collector process
[2023-02-21 22:50:13 JST][3657][63f5d745.e49-2][0]HINT:  Future log output will appear in directory "log".
完了
サーバー起動完了
-bash-4.2$
スポンサーリンク
タイトルとURLをコピーしました