前ブログで 2015/03/15 に書いた Windows 用ポータブル版 PostgreSQL の件。デフォルトで用意されているバッチファイルは、最初のデータベース初期化 + サーバ起動 + psql 起動が一つになっています。通常はこれで問題ないのですが、初期化だけやり直すとか、psql を使わずサーバの起動・終了だけしたい場合に備え、それ用のバッチを作りました。実行環境は Windows 7 32bit + PostgreSQL Portable 9.4.1。
おさらい : 最初のセットアップまで
前ブログの記事と同じです。PostgreSQL Portable : Files にある PostgreSQLPortable-9.4.1.paf.exe をダウンロードし、実行するだけ。
↓ ファイル一式の展開先を適当に指定。ポータブル版なので後で自由に移動できます。
↓ セットアップ完了画面。ここで Run にはチェックを入れず、そのまま終了させます。
デフォルトの起動用バッチファイルの確認
セットアップできたら、ひとまずデフォルトの起動用バッチの中身を確認してみます。展開先フォルダの下 App/PgSQL/pgsql.cmd が ↓ それ。
このうち環境変数と、データベース初期化を行うブロックは ↓ こちら。データフォルダがなければ(二つ目の画像のように)、初期化用コマンド initdb を起動するようになっています。
コマンドラインツールの文字化け防止対策
まず initdb 実行だけのバッチファイルを作りますが、その前にコマンドの日本語メッセージの文字化け対策。前ブログの 「PostgreSQL 9.4 Windows 版 psql の文字化けを直す」(2015/03/12)で書いたのと同じで、gettext-runtime_0.18.1.1-2_win32.zip をダウンロードし、中にある intl.dll を解凍し ↓ PostgreSQL のプログラムフォルダにコピー(二つ目の画像)。既存の同名ファイルは念のため適当にリネームして取っておきます。
データベース初期化コマンド initdb のバッチファイル
↓ 展開先フォルダ直下に、簡単な initdb 用バッチを作りました。コマンドラインオプションの詳細は PostgreSQL 9.4.0文書 : initdb -- PostgreSQLのデータベースクラスタを新しく作成する を参照。-D のパスを変えることで、好きな場所にデータを置けます。
↓ バッチを実行した様子。グレーの部分は Windows のユーザ名です。特に問題が起きなければ、最後の方に「成功しました」と出て PostgreSQL の準備完了になります。
起動・終了用コマンド pg_ctl のバッチファイル
次に、起動・終了のためコマンド pg_ctl を使うバッチファイルを先ほどと同じ場所 ↓ に作成。他の BAT と EXE は誤って実行しないようリネームしました。コマンドのオプションは PostgreSQL 9.4.0文書 : pg_ctl -- PostgreSQLサーバを初期化、起動、停止、制御する を参照。
pg_ctl で起動させるだけでは、そのコマンドプロンプトを閉じるとサーバの強制終了になります。そこで PostgreSQL Portable のデフォルトでは、起動後に psql を立ち上げていました。上のバッチは psql の代わりにコマンドプロンプトの入力待機状態 ↓ にすることで、サーバをそのままにします。
role の所は Windows のユーザ名で、同名の PostgreSQL 用ユーザがいないというだけで、特に問題ありません。停止の合図は何でもよく、ここでは Q + リターン。それ以外が入力されたら ↓ 再び入力待機状態に戻ることで、誤ってサーバを止めないようにしています。
pg_ctl 起動時にログファイルを指定していないので、エラー等があれば上のコンソール内に出ます。その場合「サーバ停止するには…」のプロンプトが消え(というか表示が乱され)ますが、入力待機状態は変わっておらず Q + リターンで普通にサーバ停止できました。