正式リリースは来年になりますが、待望のPostgreSQL 9.5がベータ版からリリース候補版に上がりました。アナウンスはこちら(1218日付)。早速Windows用のZIPからポータブルな実行環境を作ったので、手順のメモです。
Contents


実行環境



関連ウェブページ、本ブログの過去記事


今日の手順は1013日の記事とほとんど同じで、Visual C++のランタイムを入れたのと、OS32bitから64bitにした点が違う程度。


(1)ZIPのダウンロードと解凍

前項に挙げたEnterpriseDB社のダウンロードページの先頭に各OS向けのBinaries from installer version 9.5.0 RC1があり、Win x86-64をクリック。別の画面に遷移しますが、じきダウンロードが始まります。デフォルトのファイル名はpostgresql-9.5.0-rc1-windows-x64-binaries.zipでした。サイズは約51MB。

ZIPの中身。pgsqlというフォルダの中に実行ファイルやライブラリ等が入っています。だいたい、インストーラならプログラムフォルダ下に作るもの+ソースやデバッグ用(include、symbolsの両フォルダ)という感じ。

全部を解凍しなくとも、とりあえずbin、lib、shareの三フォルダがあればサーバ起動とpsql等のコマンドラインツールが使え、share/extension内にある拡張もインストールできます(PL/Pythonのように別途「本体」が必要なものは除く)。この三フォルダを適当な場所に解凍すると ↓ サイズは約66
MBでした。


(2)Visual C++ 2013ランタイムのコピー

ちょうど一昨日の記事で書いたmsvcr120.dllを、binフォルダ内にコピーします。GUIツール(pgAdminとスタックビルダ)を使う場合はmsvcp120.dllも必要ですが、当面使わないので今回は省略。参考まで今回使ったmsvcr120.dllのプロパティを下に載せておきます。


(3)データベース初期化

解凍したbinフォルダにあるinitdbコマンドを使います。前項のランタイムがないとここでエラーになるはず。initdbの設定は自由で、下記コマンドはスーパーユーザがpostgres、データフォルダがbinと同じ階層のdata、データベース作成時のデフォルトエンコーディングがutf8、同じくデフォルトのロケールがC、としました。
$ cd
R:\postgresql-9.5.0-rc1

$ "bin/initdb" -U postgres -D data -E utf8 --locale=C
データベースシステム内のファイルの所有者は"********"ユーザでした。
このユーザがサーバプロセスを所有しなければなりません。

データベースクラスタはロケール"C"で初期化されます。
デフォルトのテキスト検索設定はenglishに設定されました。

データベージのチェックサムは無効です。

ディレクトリdataを作成しています ... ok
サブディレクトリを作成しています ... ok
デフォルトのmax_connectionsを選択しています ... 100
デフォルトの shared_buffers を選択しています ... 128MB
selecting dynamic shared memory implementation ... windows
設定ファイルを作成しています ... ok
data/base/1にtemplate1データベースを作成しています ... ok
pg_authidを初期化しています ... ok
依存関係を初期化しています ... ok
システムビューを作成しています ... ok
システムオブジェクトの定義をロードしています ... ok
照合順序を作成しています ... このプラットフォームではサポートされません
変換を作成しています ... ok
ディレクトリを作成しています ... ok
組み込みオブジェクトに権限を設定しています ... ok
情報スキーマを作成しています ... ok
PL/pgSQL サーバサイド言語をロードしています ... ok
template1データベースをバキュームしています ... ok
template1からtemplate0へコピーしています ... ok
template1からpostgresへコピーしています ... ok
データをディスクに同期しています...ok

警告: ローカル接続向けに"trust"認証が有効です。
pg_hba.confを編集する、もしくは、次回initdbを実行する時に-Aオプショ
ン、または、--auth-localおよび--auth-hostを使用することで変更するこ
とができます。

Success. You can now start the database server using:

    "bin\pg_ctl" -D "data" -l logfile start

問題なければ最後にSuccess.と表示されて終了。作成されたデータフォルダの中に ↓postgresql.confなど設定ファイルもあるはずです。この時点ではサーバは起動していません。


(4)起動・再起動・終了用のバッチファイル作成

PostgreSQLをポータブルに使うため、Windowsのサービスには登録せず必要な時にバッチファイルでサーバ起動するようにします。ついでに再起動と終了も同じバッチで済むようにした例が ↓ で、531013のと同じ。フォルダ構成が変わらなければだいたい使い回せると思います。
example_start_pg95rc1.batSelectRawtextBitbucket
@echo off

set pgdir=./
set ctl=%pgdir%/bin/pg_ctl
set dir=%pgdir%/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%" start
)

:ask
set /p inp="press [R] to restart PostgreSQL, [Q] to quit : "
if "%inp%"=="R" (
    "%ctl%" -D "%dir%" restart
) else if "%inp%"=="Q" (
    "%ctl%" -D "%dir%" stop
    goto :eof
)
goto ask


↓ 起動した様子。ログをファイルに出す指定をしてないので(pg_ctlのオプションで可能)コンソールにログが出てバッチファイルの出すプロンプト表示に割り込みつつ、待機します。この状態でRを打つと再起動、Qで終了、それ以外は再度プロンプトを出します。

↓ 試しに再起動させた様子。pg_ctlのメッセージとログの表示が入り乱れますが、サーバ自体は正常に停止と再起動して再び待機状態に入りました。

こんな感じでDOS窓でサーバを立ち上げた後は、ウィンドウ最小化とか、タスクトレイに入れる(ConEMUなら可能)とかで目立たなくできます。


(5)psqlで接続テスト

念のためpsqlで接続・クエリできるか確認できれば ↓ 最小限の環境構築は終わり。

後は、フォルダ全体をどこに移しても同じようにアドホックにサーバを使えて便利。データフォルダの場所を変える場合はまだ試してないけど、たぶんバッチファイル内の変数dirを変えれば済むかと思います。