遅ればせながら9.6関連の初記事です。既に各所で紹介されているとおり、今回はpsqlに多くの機能追加があります(リリースノートE.1.3.10.1)

Windowsでは、履歴呼び出しや入力補完などの点でネイティブ版(MSVCまたはMinGW)よりCygwin版の方が断然便利。まだパッケージがないのでソースからビルドし、ついでにCygwin自体も一からコマンドラインだけでセットアップしてみました。
Contents


実行環境

• Windows7 x64 + ConEmu 150813g
• 標準ユーザ
• Cygwinsetup-x86_64.exeは事前にダウンロード(公式サイトから)

ConEmu依存の部分はないので、普通のコマンドプロンプトでも多分同様にできると思います。


最小限のコマンドまとめ

最初から最後まで全部まとめると ↓ こんな感じ。Cygwinsetup-x86_64.exeがある場所がカレントです。Cygwinのルートをr:/cygw64、パッケージ保存先をetc/setup、国内のミラーサイトを使用。
> set cygroot=r:/cygw64
> set site=ftp://ftp.iij.ad.jp/pub/cygwin/
> setup-x86_64.exe -B -n -q -R %cygroot% -l %cygroot%/etc/setup -s %site%
> setup-x86_64.exe -B -n -q -P wget
> set HOME=%cygroot%/home
> "%cygroot%/bin/bash" --login

$ wget https://github.com/transcode-open/apt-cyg/archive/v1.tar.gz
$ tar -xf v1.tar.gz
$ cp apt-cyg-1/apt-cyg /usr/local/bin
$ alias ap='apt-cyg'

$ ap install gcc-g++
$ ap install libreadline-devel
$ ap install zlib-devel
$ ap install make

$ wget https://ftp.postgresql.org/pub/source/v9.6rc1/postgresql-9.6rc1.tar.gz 
$ tar -xf postgresql-9.6rc1.tar.gz
$ cd postgresql-9.6rc1

$ ./configure
$ cd src/common
$ make
$ cd ../bin/psql
$ make
$ cp psql.exe /usr/local/bin
$ psql -h::1 -Upostgres


実際の様子&補足(1)Cygwinでビルド環境

setup実行ファイルは基本GUIですけど、コマンドラインからいろいろ引数を付けて実行するとGUIを触らず最後まで実行可能。今回付けた引数の意味は次のとおり。詳細は--helpで見て下さい。

-B これないと、標準ユーザだと途中で止まった

-n スタートメニューとデスクトップのショートカットを作らない
-qGUIでの確認をしない(自動で進む)
-R ルートディレクトリ指定
-l パッケージ保存先指定
-s ミラーサイト指定
> set cygroot=r:/cygw64
> set site=ftp://ftp.iij.ad.jp/pub/cygwin/
> setup-x86_64.exe -B -n -q -R %cygroot% -l %cygroot%/etc/setup -s %site% 


↓ こんな感じでGUIが勝手に進み、並行してコンソールに状況が出ます。


↓ 完走したところ。GUIは自動的に消えます。この時点でサイズは124MB。


まだwgetが入ってないので、もう一度だけsetupを使ってインストール。↓
> setup-x86_64.exe -B -n -q -P wget 


↓ 環境変数HOMEの位置に各種の履歴・設定ファイルが置かれるので、適当に指定。ここからbashシェルに入ります。
> set HOME=%cygroot%/home
> "%cygroot%/bin/bash" --login 


↓ バージョンなどの確認。T430sというのは今回使ったPC名です。
$ uname -a
CYGWIN_NT-6.1 T430s 2.6.0(0.304/5/3) 2016-08-31 14:32 x86_64 Cygwin 


setupファイルを使わず各種パッケージを入れられるよう、apt-cygを準備します。スクリプトなので下記URLからダウンロードし解凍するだけ。既に実行権限が付いておりchmodは不要でした。コマンドを打ちやすくするため適当にエイリアスを設定。apt-cygと打って使い方が表示されれば(画像の一番下)OK。
$ wget https://github.com/transcode-open/apt-cyg/archive/v1.tar.gz 
$ tar -xf v1.tar.gz
$ cp apt-cyg-1/apt-cyg /usr/local/bin
$ alias ap='apt-cyg'


apt-cygを使い、psqlビルドに必要なコンパイラ等 ↓ を入れます。実際はPostgreSQLのソースでまずconfigure、足りないものが表示されるのでその都度apt-cyg searchallで調べてインストールしました。
$ ap install gcc-g++
$ ap install libreadline-devel
$ ap install zlib-devel
$ ap install make


実際の様子&補足(2)psql 9.6rc1ビルド

ソースを下記からダウンロード、展開してそのフォルダに入ってconfigure。
$ wget https://ftp.postgresql.org/pub/source/v9.6rc1/postgresql-9.6rc1.tar.gz 
$ tar -xf postgresql-9.6rc1.tar.gz
$ cd postgresql-9.6rc1
$ ./configure


↑ 画像は、まだコンパイラがなく最初の方で失敗した様子。こんな風に足りないものが出るので、configureしながら必要なものを入れるやり方を自分はよくします。本当は最初にしっかりドキュメントを読むべきでしょうけど。

今回、psqlの表示は英語だけで良いと考え、configureに多言語メッセージのオプション--enable-nlsを入れませでした
(ドキュメントのlocale参照)。

configureが通ったら、common、そしてpsqlmake。make installはせず、手動で実行ファイルをパスの通った場所にコピーしました(make installだと、デフォルトで/usr/local/pgsql/binに置かれる)。画像はpsqlmakeし終わったところ。
$ cd src/common
$ make
$ cd ../bin/psql
$ make
$ cp psql.exe /usr/local/bin


psqlにパスが通ってるのを確認して起動テスト。Windows版だとhost指定なくともデフォルトでlocalhostに接続を試みますが、Cygwin版だとhost必須のようです。
$ which psql
$ psql -h::1 -Upostgres 


最後にpsqlの設定&履歴ファイルのパスを環境変数に入れてテスト。問題なければ、後で.bashrcとかに設定します(Cygwin起動時に自動認識されるように)。
$ export PSQLRC="$HOME/.psqlrc"
$ export PSQL_HISTORY="$HOME/.psql_history" 
$ echo '\pset border 2' > .psqlrc
$ psql -h::1 -Upostgres 


これで全て終わり。Cygwin全体のサイズは600MB近くになってました。↓


Cygwinのディレクトリを移動orリネームしたら

↓ こんな感じで普通に使えます。そういう意味でポータブルですが、HOMEなど環境変数に入れたパスも追随させる必要があります。


あと、完全なポータブルではなく一部の情報はレジストリに書き込む模様。例えばパッケージの場所は、フォルダ変更したら「apt-cyg cache新しいパス」で再認識させないと、いつまでも古い場所になってしまう。

とは言え、Windowsネイティブより便利なpsqlを自前でビルドでき、コマンドラインツール間の連携がcmdシェルより遥かに楽。かつ、Windowsソフトウェアとの連携も可能なので
(例 :psqlとグラフ描画ツール)当面は一番使う環境です。