遅ればせながら9.6関連の初記事です。既に各所で紹介されているとおり、今回はpsqlに多くの機能追加があります(リリースノート E.1.3.10.1)。
Windowsでは、履歴呼び出しや入力補完などの点でネイティブ版(MSVCまたはMinGW)よりCygwin版の方が断然便利。まだパッケージがないのでソースからビルドし、ついでにCygwin自体も一からコマンドラインだけでセットアップしてみました。
実行環境
• Windows7 x64 + ConEmu 150813g
• 標準ユーザ
• Cygwinのsetup-x86_64.exeは事前にダウンロード(公式サイトから)
ConEmu依存の部分はないので、普通のコマンドプロンプトでも多分同様にできると思います。
最小限のコマンドまとめ
最初から最後まで全部まとめると ↓ こんな感じ。Cygwinのsetup-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 スタートメニューとデスクトップのショートカットを作らない
-q GUIでの確認をしない(自動で進む)
-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、そしてpsqlをmake。make installはせず、手動で実行ファイルをパスの通った場所にコピーしました(make installだと、デフォルトで/usr/local/pgsql/binに置かれる)。画像はpsqlをmakeし終わったところ。
$ 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とグラフ描画ツール)当面は一番使う環境です。