「通常インストール」というのはEnterpriseDB社のWindows用インストーラを使ったという意味。その際にVisual C++ランタイムもシステムにインストールされましたが、それは削除せず、とりあえずサービス起動でなく必要な時にバッチファイルで起動でき、フォルダも自由に移せる状態までをメモしました。実行環境はWindows 7 32bit + PostgreSQL 9.2。

このPostgreSQL 9.2には、古いPostGIS・pgRoutingや、postgis_lettersというマイナーな拡張が入っており、前のブログで何回か記事にしました。現在使うデータは9.39.4に引っ越し済みで、こちらは控えとして一応置いてあるだけの存在。この際、別のディスクやPCにいつでも移せるようにしたいというのが動機です。
Contents

ファイル・フォルダのコピー
最初にサービスを止め、必要なファイル・フォルダを確認します。インストールしたプログラムフォルダには、拡張機能が後から追加したものも含め ↓ のように色々入っていましたが、今回必要なのはbin、gdal-data(PostGISで使う)、lib、share4フォルダだけ。別の所に置いたデータフォルダと合わせ、適当な引っ越し先へコピーします。

↓ ポータブル用のフォルダ直下。データは、元のフォルダを丸ごとコピーしました。ここにバッチファイルを加え、必要な時だけ起動・終了できるようにします。

起動・終了用バッチファイルの作成
基本は「ポータブル版PostgreSQL:起動・終了・再起動を一つのコンソールで」(2015/05/03)に書いたものと同じで、違うのは今回PostGISがあるので、それ用の環境変数GDAL_DATAを追加する点。コピーしたフォルダの一つgdal-dataの場所を、フルパスまたはlibフォルダからの相対パスで設定します。最近のPostGISはもう少し環境変数が多いですが、今回引っ越すバージョンは古いので不要。できたバッチファイル全体は ↓ のとおり。
pg_ctl_and_postgis.batSelectRawtextBitbucket
@echo off

set ctl=bin/pg_ctl
set dir=data
set pid=%dir%/postmaster.pid

:: set an environmental variable for PostGIS Raster
:: this path should be an absolute path or a relative one from lib folder
set GDAL_DATA=../gdal-data

if exist "%pid%" (
    echo postmaster.pid exists and PostgreSQL have been started possibly.
    goto ask
) else (
    "%ctl%" -D "%dir%" -w start
)

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

postgresql.confの設定
データフォルダ内にpostgresql.confがあります。詳細な設定は必要な時に変えるとして、今回はバッチで起動したコンソールにログを出す変更だけ行いました。この方が、拡張機能とかで何かエラーがあった時にログファイルを開く手間がなく便利なので。下のようにlogging_collectoroffに変えます。
set1_postgresql.confSelectRawtextBitbucket
#------------------------------------------------------------------------------
# ERROR REPORTING AND LOGGING
#------------------------------------------------------------------------------

# - Where to Log -

...

# logging_collector = on    # before
logging_collector = off

早速起動したら ↓ ログが文字化け。本来英語で表示されるべきものが、日本語と扱われて変換されたようです。そこでpostgresql.confのメッセージ関連部分を変更します。

↓ クライアント接続設定のlc_messagesがインストール時はJapanese_Japan.932になっており、これをCに変えたら文字化けが解消しました。
set2_postgresql.confSelectRawtextBitbucket
#------------------------------------------------------------------------------
# CLIENT CONNECTION DEFAULTS
#------------------------------------------------------------------------------

...

# - Locale and Formatting -

...

# lc_messages = 'Japanese_Japan.932'    # before
lc_messages = 'C'

pgAdminで接続し、元データがそのまま入っているのを確認。

もしPostGISの環境変数GDAL_DATAで設定したパスが間違っていると、GDALに依存する関数を使った際、下のようなエラーが出ます。

冒頭に書いたVisual C++ランタイムの件は、
Dependency Walkerで依存するファイルを調べて引っ越し先のbinフォルダに入れる手もありますが(実際、PostgreSQL Portableはそのようにライブラリを同梱)、テストできるランタイム無しのPCが今日は手近になかったので、別の機会にします。