昨日の最後に作った pg_ctlコマンド用バッチファイルを一工夫し、再起動も追加しました。下の動画が簡単な使用例で、最初にバッチを実行してPostgreSQL起動。コンソールにpress [R] to restart PostgreSQL, [Q] to quitと出て入力待機状態になります。再起動し、再び入力待ちに戻った後、Qで終了しています(自動的にコンソールが消える)。実行環境は昨日と同じWindows 7 32bit + PostgreSQL Portable 9.4.1。
≫ Link : example_loop_pg_ctl.bat.webm

動画はWebM形式です。再生できない場合はリンクからダウンロードして下さい
(526日追記:Chromeで正常再生できる動画に差し替えました)。下の画像は、起動後の入力待ちの様子。動画には入っていませんが、今回はログをファイル出力しない設定で起動したので、何かエラーが起きると(誤ったクエリを実行するとか)ログがコンソールに出力され、press [R]… の入力プロンプトが消えます。それでも入力待ちの状態は維持されているので、Rで再起動、Qで終了、それ以外は再度プロンプトが表示されます。

↓ バッチファイルの中身。置く場所はPostgreSQL Portableの最上位フォルダの想定です(動画の冒頭、エクスプローラの画面を参照)。環境変数に入れるパスを適宜設定すれば、置く場所はどこでもいいです。起動中か否かの判別はpostmaster.pidの有無で行っており、アプ研さんの
「BATファイルでファイル、フォルダの存在確認」を参考にしました。m(_)m
example_loop_pg_ctl.batSelectRawtextBitbucket
@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