「通常インストール」というのはEnterpriseDB社のWindows用インストーラを使ったという意味。その際にVisual C++ランタイムもシステムにインストールされましたが、それは削除せず、とりあえずサービス起動でなく必要な時にバッチファイルで起動でき、フォルダも自由に移せる状態までをメモしました。実行環境はWindows 7 32bit + PostgreSQL 9.2。
このPostgreSQL 9.2には、古いPostGIS・pgRoutingや、postgis_lettersというマイナーな拡張が入っており、前のブログで何回か記事にしました。現在使うデータは9.3か9.4に引っ越し済みで、こちらは控えとして一応置いてあるだけの存在。この際、別のディスクやPCにいつでも移せるようにしたいというのが動機です。
ファイル・フォルダのコピー
最初にサービスを止め、必要なファイル・フォルダを確認します。インストールしたプログラムフォルダには、拡張機能が後から追加したものも含め ↓ のように色々入っていましたが、今回必要なのはbin、gdal-data(PostGISで使う)、lib、shareの4フォルダだけ。別の所に置いたデータフォルダと合わせ、適当な引っ越し先へコピーします。
↓ ポータブル用のフォルダ直下。データは、元のフォルダを丸ごとコピーしました。ここにバッチファイルを加え、必要な時だけ起動・終了できるようにします。
起動・終了用バッチファイルの作成
基本は「ポータブル版PostgreSQL:起動・終了・再起動を一つのコンソールで」(2015/05/03)に書いたものと同じで、違うのは今回PostGISがあるので、それ用の環境変数GDAL_DATAを追加する点。コピーしたフォルダの一つgdal-dataの場所を、フルパスまたはlibフォルダからの相対パスで設定します。最近のPostGISはもう少し環境変数が多いですが、今回引っ越すバージョンは古いので不要。できたバッチファイル全体は ↓ のとおり。
postgresql.confの設定
データフォルダ内にpostgresql.confがあります。詳細な設定は必要な時に変えるとして、今回はバッチで起動したコンソールにログを出す変更だけ行いました。この方が、拡張機能とかで何かエラーがあった時にログファイルを開く手間がなく便利なので。下のようにlogging_collectorをoffに変えます。
早速起動したら ↓ ログが文字化け。本来英語で表示されるべきものが、日本語と扱われて変換されたようです。そこでpostgresql.confのメッセージ関連部分を変更します。
↓ クライアント接続設定の lc_messagesがインストール時はJapanese_Japan.932になっており、これをCに変えたら文字化けが解消しました。
↓ pgAdminで接続し、元データがそのまま入っているのを確認。
もしPostGISの環境変数GDAL_DATAで設定したパスが間違っていると、GDALに依存する関数を使った際、下のようなエラーが出ます。
冒頭に書いたVisual C++ランタイムの件は、Dependency Walkerで依存するファイルを調べて引っ越し先のbinフォルダに入れる手もありますが(実際、PostgreSQL Portableはそのようにライブラリを同梱)、テストできるランタイム無しのPCが今日は手近になかったので、別の機会にします。