1月7日、PostgreSQL 9.5.0がリリースされました。公式サイトのアナウンスの副題にBig Dataの語がある通り、今回はデータ処理に使える多くの機能が追加されており待ち遠しかったです。早速Windows 7で、今回はゲストユーザでzip版を使えることを確認しました。インストール版と違ってデータフォルダを移すのは簡単、またプログラムとデータをポータブルに持ち運ぶことも可能。他の拡張やフロントエンドと組み合わせ、いろいろ活用できると思います。
実行環境
- Windows 7 SP1 64bit
- ゲストユーザアカウント
関連ウェブページ、本ブログの過去記事
zip版ダウンロード、必要なフォルダの解凍、msvcr120.dllの準備
9.5 Beta1、RC1の時と同様、EnterpriseDB社のDownload PostgreSQL Binaries↓ に各バージョン&OS用のzipがあるのでWin x86-64をダウンロード。ポップアップが大きくてやや分かりづらいです。
Win x86-64のダウンロードボタンを押すと別ページに遷移して ↓ 一瞬「?」となるかも。少し待てばダウンロードが始まります。画像二つ目はFirefoxでの例。
zipを全部解凍してもいいけど ↓ のように172MB必要。とりあえずサーバ起動とコマンドラインツールが使えればいいと想定し、必要なフォルダだけ解凍します。
↓zip内のbin, libおよびshareフォルダを適当な一つの場所に展開すればOK。今回はゲストユーザなのでC:/Users/Guest以下にします(システムディスクの他の場所には書き込めない)。解凍後のファイルサイズは約67MB。
既にPCにVisual C++ 2013のランタイムがインストールされていれば不要ですが、psqlなどコマンドラインツールを使うのにmsvcr120.dllが必要なので調達します。詳細は昨年12月17日の記事を参照。とりあえず今回はdll-found.comというサイトにありました。↓ リンクがいろいろあって紛わしいので注意。丸で囲んだのが64ビット版です。間違って32ビット版を入れると動きません。
↓ 参考まで、ダウンロードしたmsvcr120.dllのプロパティ。「msvcr120.dllを入れたのに動かない」という場合、これと比べてみて下さい。ファイルサイズや更新日時が違うなら、32ビット版とか偽物?かもしれません。
msvcr120.dllを調達できたら、PostgreSQLのbinフォルダにコピペ ↓ するだけ。これで準備終わりです。
データベース初期化
本当はいつものConEmuがいいのですが、一般的なWindowsの黒い画面で説明します。エクスプローラでPostgreSQLのbinフォルダを開き、シフト+右クリックで出るメニューの「コマンドプロンプトをここで開く」を選択(文言は少し違うかも。自分のWindowsは英語版なのでうろ覚え)。
↓ コマンドラインツールに--helpを付けて正常に動けば、Visual C++のランタイムが認識されてます。逆にエラーが出る場合はランタイム関連の問題があるかも。またWindowsの言語設定によってはヘルプが文字化けする可能性あり(参考:7月16日の記事 )。ともかくこの段階で異常があれば、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で日本語が実質使えないから(詳細:5月21日の記事)。
サーバ起動・終了をコマンドプロンプトで
使うコマンドはpg_ctlで、ヘルプは下の画面。実はDB初期化もできるけど(initdbのラッパー)オプションを確認する場合は結局initdbを叩くので、前項では使いませんでした。
↓ サーバを起動するには、最低限データフォルダの場所を明示してstartを命令すればOK。データの場所を変えたり複数切り替えしたい場合も、この-Dオプションを変えれば済みます。インストーラだとPostgreSQLがWindowsのサービスに登録され、データフォルダはじめ様々な変更が面倒になるので、最近は全然使ってません。
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サーバ起動して自動的にタスクトレイに入れる」スクリプトか何かを考えます。