17日、PostgreSQL 9.5.0がリリースされました。公式サイトのアナウンスの副題にBig Dataの語がある通り、今回はデータ処理に使える多くの機能が追加されており待ち遠しかったです。早速Windows 7で、今回はゲストユーザでzip版を使えることを確認しました。インストール版と違ってデータフォルダを移すのは簡単、またプログラムとデータをポータブルに持ち運ぶことも可能。他の拡張やフロントエンドと組み合わせ、いろいろ活用できると思います。
Contents


実行環境



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



zip版ダウンロード、必要なフォルダの解凍、msvcr120.dllの準備

9.5 Beta1、RC1の時と同様、EnterpriseDB社のDownload PostgreSQL Binaries↓ に各バージョン&OS用のzipがあるのでWin x86-64をダウンロード。ポップアップが大きくてやや分かりづらいです。

Win x86-64のダウンロードボタンを押すと別ページに遷移して ↓ 一瞬「?」となるかも。少し待てばダウンロードが始まります。画像二つ目はFirefoxでの例。


zipを全部解凍してもいいけど ↓ のように172
MB必要。とりあえずサーバ起動とコマンドラインツールが使えればいいと想定し、必要なフォルダだけ解凍します。


zip内のbin, libおよびshareフォルダを適当な一つの場所に展開すればOK。今回はゲストユーザなのでC:/Users/Guest以下にします(システムディスクの他の場所には書き込めない)。解凍後のファイルサイズは約67
MB。


既にPCVisual C++ 2013のランタイムがインストールされていれば不要ですが、psqlなどコマンドラインツールを使うのにmsvcr120.dllが必要なので調達します。詳細は
昨年1217日の記事を参照。とりあえず今回はdll-found.comというサイトにありました。↓ リンクがいろいろあって紛わしいので注意。丸で囲んだのが64ビット版です。間違って32ビット版を入れると動きません。


↓ 参考まで、ダウンロードしたmsvcr120.dllのプロパティ。「msvcr120.dllを入れたのに動かない」という場合、これと比べてみて下さい。ファイルサイズや更新日時が違うなら、32ビット版とか偽物?かもしれません。


msvcr120.dllを調達できたら、PostgreSQLbinフォルダにコピペ ↓ するだけ。これで準備終わりです。


データベース初期化

本当はいつものConEmuがいいのですが、一般的なWindowsの黒い画面で説明します。エクスプローラでPostgreSQLbinフォルダを開き、シフト+右クリックで出るメニューの「コマンドプロンプトをここで開く」を選択(文言は少し違うかも。自分のWindowsは英語版なのでうろ覚え)。


↓ コマンドラインツールに--helpを付けて正常に動けば、Visual C++のランタイムが認識されてます。逆にエラーが出る場合はランタイム関連の問題があるかも。またWindowsの言語設定によってはヘルプが文字化けする可能性あり
(参考:716日の記事 )。ともかくこの段階で異常があれば、PostgreSQLの動作以前の問題です。


ヘルプが正常に表示されたので準備OKと考え、最初にデータベース初期化をします。使うコマンドはinitdb。例えば ↓ こんな感じで実行すると「データフォルダをbinと同じ階層のdata、DBのデフォルト文字コードをUTF-8、DBのデフォルトロケールをC、DBサーバのスーパーユーザ名をpostgres」の設定で初期化されます。
initdb -D ../data -E utf8 --locale=C -U postgres


上の画面の最後にあるSuccess. You can now start the database server using: ...が、正常に初期化できたことを意味してます。設定の概要はコマンドヘルプ ↓ を参照。なおデフォルトロケールを日本語(Japanese_Japan.932)でなくCにしたのは、前者だとPL/Rで日本語が実質使えないから(
詳細:521日の記事)。


サーバ起動・終了をコマンドプロンプトで

使うコマンドはpg_ctlで、ヘルプは下の画面。実はDB初期化もできるけど(initdbのラッパー)オプションを確認する場合は結局initdbを叩くので、前項では使いませんでした。


↓ サーバを起動するには、最低限データフォルダの場所を明示してstartを命令すればOK。データの場所を変えたり複数切り替えしたい場合も、この-Dオプションを変えれば済みます。インストーラだとPostgreSQLWindowsのサービスに登録され、データフォルダはじめ様々な変更が面倒になるので、最近は全然使ってません。
pg_ctl start -D ../data


上の状態でリターンを入力するとプロンプトに戻りますが、DBサーバは起動中です。なので同じ画面からpsqlを起動してDBに接続可能。サーバを停めるには、psql\qで終了し ↓ のコマンドを打ちます。
pg_ctl stop -D ../data


以上のまとめで、サーバ起動~psqlで接続~終了~サーバ停止までをコマンドプロンプトで行うと ↓ こんな感じ。ゲストユーザアカウントで問題なくできました。システムドライブのどこかに一時ファイル等を作る仕様だとエラーが起きるけど、PostgreSQLはそういうことはなくポータブルに使いやすいです。


これまでと同じ「起動・再起動・終了を一つのバッチファイルで」

PostgreSQL 9.5 RC1の時をはじめ、いつも作ってるのと同じなのでソースは省略します。↓ のバッチファイルをbinフォルダと同じ階層に置いて(拡張子の.txtは削除)実行すると、画像二つ目のようにDBサーバが起動。Rを打つと再起動、Qで終了、それ以外の入力は無視されて再びプロンプトpress [R] to restart ...が出て待機します。

このコマンドプロンプト、作業中はタスクトレイに入れられるといいけどWindows 7の標準機能では無理。
ConEmuなら可能なので、そのうち「DBサーバ起動して自動的にタスクトレイに入れる」スクリプトか何かを考えます。