昨日の最後に作った pg_ctlコマンド用バッチファイルを一工夫し、再起動も追加しました。下の動画が簡単な使用例で、最初にバッチを実行してPostgreSQL起動。コンソールにpress [R] to restart PostgreSQL, [Q] to quitと出て入力待機状態になります。再起動し、再び入力待ちに戻った後、Qで終了しています(自動的にコンソールが消える)。実行環境は昨日と同じWindows 7 32bit + PostgreSQL Portable 9.4.1。
動画はWebM形式です。再生できない場合はリンクからダウンロードして下さい(5月26日追記:Chromeで正常再生できる動画に差し替えました)。下の画像は、起動後の入力待ちの様子。動画には入っていませんが、今回はログをファイル出力しない設定で起動したので、何かエラーが起きると(誤ったクエリを実行するとか)ログがコンソールに出力され、press [R]… の入力プロンプトが消えます。それでも入力待ちの状態は維持されているので、Rで再起動、Qで終了、それ以外は再度プロンプトが表示されます。
↓ バッチファイルの中身。置く場所はPostgreSQL Portableの最上位フォルダの想定です(動画の冒頭、エクスプローラの画面を参照)。環境変数に入れるパスを適宜設定すれば、置く場所はどこでもいいです。起動中か否かの判別はpostmaster.pidの有無で行っており、アプ研さんの「BATファイルでファイル、フォルダの存在確認」を参考にしました。m(_)m
@echo off
set ctl=App/PgSQL/bin/pg_ctl
set dir=Data/data
set pid=%dir%/postmaster.pid
if exist "%pid%" (
echo postmaster.pid exists and PostgreSQL have been started possibly.
goto ask
) else (
"%ctl%" -D "%dir%" -w start
)
:: in reference to UPKEN
:: https://www.upken.jp/kb/PAnxbJDjbgmoWrlHwoKFSMJydhRbhE.html
:ask
set /p inp="press [R] to restart PostgreSQL, [Q] to quit : "
if "%inp%"=="R" (
"%ctl%" -D "%dir%" -w restart
goto ask
) else if "%inp%"=="Q" (
"%ctl%" -D "%dir%" -w stop
goto :eof
)
goto ask