↓ 全体の手順です。コマンドも含めてこれだけ。開発環境の整備(ターミナルの選択やbashシェルの設定等)はなく、とにかく最速で自前のポータブル版PostgreSQLを作りたい場合に。Windows7 x64、PostgreSQL9.5.3でやってみました。
1. download and extract
   //sourceforge.net/projects/msys2/files/Base/x86_64/msys2-base-x86_64-20160205.tar.xz/download 
   //ftp.postgresql.org/pub/source/v9.5.3/postgresql-9.5.3.tar.bz2
   
2. open console at MSYS2 root directory and input commpand
   > usr\bin\bash --login -i
   $ logout

3. restart MSYS2 and install packages
   > set MSYSTEM=MINGW64
   > usr\bin\bash --login -i
   $ pacman -S mingw-w64-x86_64-toolchain
   $ pacman -S make
   $ pacman -S mingw-w64-x86_64-libxml2

4. move to postgres source directory and build
   $ cd YOUR_SOURCE_DIR
   $ ./configure --enable-nls --host=x86_64-w64-mingw32 --with-libxml
   $ make
   $ export DESTDIR="YOUR_POSTGRES_DIR"
   $ make install

5. copy DLL files
   > copy msys64\mingw64\bin\libintl-8.dll YOUR_POSTGRES_BINDIR
   > copy msys64\mingw64\bin\libiconv-2.dll YOUR_POSTGRES_BINDIR
   > copy msys64\mingw64\bin\libxml2-2.dll YOUR_POSTGRES_BINDIR
   > copy msys64\mingw64\bin\zlib1.dll YOUR_POSTGRES_BINDIR


使うのはコマンドプロンプトと、適当な解凍ソフトだけ。以下、順番に補足します。画像はWindowsの管理者権限ユーザの様子ですが、標準ユーザでもできました。

Contents



1. MSYS2 + MinGW-w64ポータブル版と、PostgreSQLソースファイルの準備

MSYS2プロジェクトのサイト(SourceForge内)に、MinGW込みのポータブル版があるのでダウンロード&適当な場所に解凍します。

» msys2-base-x86_64-20160205.tar.xz (42.9MB)

上記リンクで直接ダウンロード ↓ できます。サイトのウェブページからもたどれますが、SourceForgeなので広告が多く見つけづらい。


ファイルはtarでアーカイブ、xzで圧縮 ↓ されてます。Windowsではあまり使わない形式ですがフリーの解凍ソフトがいろいろあるので、それで好きな場所に展開して下さい(ここでは7-Zipを使用)。展開後のファイルサイズは200MB強。後でパッケージを入れ、最終的なサイズは1GB強になります。


MSYS2を起動した後でもいいけど、先にPostgreSQLのソースファイルもダウンロード&解凍しておきます。公式サイトに全部まとまっており ↓ 圧縮形式はbz2gzがあるので好きな方を選べばOK。展開すると100MB強あります。


2. MSYS2の最初の起動

先ほど解凍したMSYS2のルートフォルダ(msys64)に専用のシェルやバッチがいくつかありますが、今回は素朴にコマンドプロンプトを使用。手順がごく少ないので。


msys64をカレントにして ↓ を打つと最初の起動になり、初期設定が走ります。画像ではその前に環境変数HOMEを設定してますが、Windowsのユーザ名をMSYS2の環境に持ち込みたくなかっただけ。直接は関係ありません。
> usr\bin\bash --login -i


本来は途中で画面クリアされるはずのところ、コマンドプロンプトのせいかclearの挙動が変で(画面左上に戻るだけ)見にくい状態 ↓ で終わります。画面クリアしたければresetで。あとエラーが一つ出てますが、今回は気にせずスルー。MSYS2を再起動するためlogoutまたはexitを入力し、いったんコマンドプロンプトに戻ります。



3. MSYS2を再起動。最低限必要なパッケージを入れる

MSYS用に環境変数MSYSTEMを設定し(32bit版の場合はここも変更)、先ほどと同様にbashを起動してMSYS2環境に入ります。
> set MSYSTEM=MINGW64
> usr\bin\bash --login -i


PostgreSQLビルドに最低限必要な追加パッケージは、今回 ↓ の3つだけ。MSYS2のバージョンや、ビルドするもの(PostGIS等)によっては違うかも。makemingw-w64-x86_64版もありますが、とりあえず素のMSYS2版でいけました。ダウンロードサイズは110MB強です。
$ pacman -S mingw-w64-x86_64-toolchain
$ pacman -S make
$ pacman -S mingw-w64-x86_64-libxml2




4. PostgreSQLをビルドし、任意の場所にインストール

コマンドプロンプト上で、最初に準備したPostgreSQLソースのルートに移動し、まずconfigure。↓ オプションの--enable-nlsはメッセージの多言語化のため(ドキュメントのlocale参照)。同じくhostドキュメントのMinGW用ビルド説明より。libxmlXML型を使うのに備えて。
$ ./configure --enable-nls --host=x86_64-w64-mingw32 --with-libxml


次にmake。これが最も時間かかるので、CPUコア数に合わせて-j2とか-j4など適宜並列化するといいです。最後にReady to installと出ればOK。
$ make
...
All of PostgreSQL successfully made. Ready to install.


そしてmake install。ただしPostgreSQLMSYS2から切り離し単独でポータブル化するため、インストール先を環境変数DESTDIRで指定。その直下でなく何階層か下にPostgreSQLが来るけど、後で自由に移動できます。
$ export DESTDIR="YOUR_POSTGRES_DIR"
$ make install
...
PostgreSQL installation complete.



5.依存するDLLをインストール先にコピーし、完了

make installの結果、DESTDIR下の ↓ こんな風にPostgreSQLが配置されます。実際使う場合はpgsql以下をまとめて移動orコピーしたりするけど、今回はとりあえずこのまま。ツリーの下の画像はbinフォルダ内です。
DESTDIR
 |-- usr
   |-- local
     |-- pgsql
       |-- bin
       |-- include
       |-- lib
       +-- share


MSYS2環境からはすぐ使えますが、単独で(ポータブルなWindowsアプリケーションとして)使うにはいくつかDLLのコピーが必要。それがない状態でコマンドプロンプトから起動しようとすると、例えば ↓ こんなエラーが出ます。


今回必要なDLLは ↓ の4つで、mingw64\binフォルダに入ってます。エクスプローラかコマンドプロンプトで、PostgreSQLbinフォルダにコピーするだけ。あとMSYS2は今日はもう使わないのでlogoutします。
$ logout

> copy msys64\mingw64\bin\libintl-8.dll YOUR_POSTGRES_BINDIR
> copy msys64\mingw64\bin\libiconv-2.dll YOUR_POSTGRES_BINDIR
> copy msys64\mingw64\bin\libxml2-2.dll YOUR_POSTGRES_BINDIR
> copy msys64\mingw64\bin\zlib1.dll YOUR_POSTGRES_BINDIR



以上ですべて終了。後は普通のPostgreSQLのように動作確認・初期設定できます。まずpsqlから ↓ ヘルプを表示して確認。日本語が正常に表示されてます。


次にデータベース初期化。コマンドinitdbを実行します。
> initdb --no-locale -E utf8 -U postgres ../data


最後に ↓ データベースサーバをpg_ctlでアドホックに起動。同じコマンドプロンプト内でENTERを押すと、サーバを起動したまま別のコマンドが打てたのでpsqlを起動し接続。バージョンを確認して切断し、サーバを終了しました。
> pg_ctl -D ../data start
> psql -U postgres
# select version();
# \q
> pg_ctl -D ../data stop


バージョンを見るとMSYS2 + MinGW-w64と分かります。以上で、ビルドから含めてポータブルなPostgreSQL開発・実 行環境がWindows x64上でできました。


今回はcontribは対象外で、そのビルドには別のパッケージやDLLが必要かも。PostGISなど各種拡張についても同様です。いずれ別記事でフォローしていきます。
(追記 : 翌日contribをビルドしたら、このままで出来ました。→ 詳細)