プログラムとデータの場所を確認
MacにSSH接続する設定は8月25日の最後に行いました。Windows側のSSHクライアントはGit Portable付属のを使用。接続してまず、PostgreSQLのプログラムとデータの場所を確かめておきます。データフォルダのパスは長い上に半角空白があるので、そのうち別の場所に移したいけど、今回はこのまま。
# programs
ls /Applications/Postgres.app/Contents/Versions/9.5/bin
# data
ls /Users/user/Library/Application\ Support/Postgres/var-9.5
プログラムフォルダの中を見ると、PostGISで使うshp2pgsqlなどのコマンドラインツールがあります。あと同様にPostGIS関係でgdalの各種ツールも。後者はWindows版のPostGISにはないです。
psqlだけは、エイリアスか何かが設定されているのか、パスなしで使えるようです。
設定ファイル編集、サーバ再起動
ここからは、いつもCentOS等の仮想マシンでやっている、PostgreSQLがローカルホスト以外からの接続を受け付けるための設定。データフォルダにある2つの設定ファイル(postgresql.conf、pg_hba.conf)を編集します。編集内容はOSによらず同じなので、慣れれば楽。まずpostgresql.confのConnection Settingsのセクションで、listen_addresesを'*'に変更。
vi /Users/user/Library/Application\ Support/Postgres/var-9.5/postgresql.conf
# listen_addresses = 'localhost' -> '*'
今回、直前にAutoHotkeyのキー割り当てを少し変えたせいかConEmu + SSH + viの動作が変で、スクロールすると表示が乱れました。そこで途中から、久しぶりに普通のコマンドプロンプトに替えて作業。2つの設定ファイルを少し編集するだけだったので、何とか耐えられました。。。
postgresql.confに続き、pg_hba.confで具体的に接続許可する相手のアドレス等を、例えば下のように追加します。右端のmd5はパスワード認証。この場合、PostgreSQLユーザにパスワードが設定されていないと接続できないので、未設定ならここで忘れずにクエリしておきます。
vi /Users/user/Library/Application\ Support/Postgres/var-9.5/pg_hba.conf
# Add : host [Database] [User] [Address] [Method]
# e.g. : host all all xxx.xxx.xxx.xxx/32 md5
psql
# ALTER ROLE "user" PASSWORD '********';
編集した内容は、PostgreSQLサーバを再起動して初めて有効になります。OS Xでのサービス制御にまだ疎いので、今回はpg_ctlコマンドを使いました。-Dオプションでデータフォルダを指定します。他にログ出力先の設定などいろいろオプションがありますが、今回はとりあえずこれだけ。
/Applications/Postgres.app/Contents/Versions/9.5/bin/pg_ctl restart -D [Data Folder]
再起動できたので、次にWindows側のpsql、pgAdminで接続します。
Windows側クライアントで接続
psqlは、SSHと同様にConEmuを使うので、見た目は余り変わりません。-hオプションでMacのIPアドレスを指定し、先ほどの設定ファイル編集が正しければ接続できるはず。Windows側はまだPostgreSQL 9.4なので、psqlのバージョンがサーバより古いという「注意」が出ます。
psql -U user -h xxx.xxx.xxx.xxx
psql (9.4.1, サーバー 9.5alpha1)
注意: psql メジャーバージョン 9.4, サーバーバージョン 9.5.
psql の機能の中で、動作しないものがあるかもしれません。
"help" でヘルプを表示します.
user=# SELECT version();
version
------------------------------------------------------------------
PostgreSQL 9.5alpha1 on x86_64-apple-darwin14.3.0, compiled by Ap
ple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn),
64-bit
(1 行)
接続したデータベース(ユーザ名と同じもの)の拡張を調べると、まだPostGISは入ってなかったので、この際インストールします。CREATE EXTENSION postgis;の一文をクエリするだけ。
# SELECT extname, extversion FROM pg_extension;
extname | extversion
---------+------------
plpgsql | 1.0
(1 行)
# CREATE EXTENSION postgis;
# SELECT extname, extversion FROM pg_extension;
extname | extversion
---------+------------
plpgsql | 1.0
postgis | 2.2.0dev
(2 行)
# SELECT postgis_full_version();
postgis_full_version
------------------------------------------------------------------
POSTGIS="2.2.0dev r13773" GEOS="3.4.2-CAPI-1.8.2 r3921" PROJ="Rel
. 4.9.1, 04 March 2015" GDAL="GDAL 1.11.2, released 2015/02/10" LI
BXML="2.9.2" LIBJSON="0.11" RASTER
(1 行)
psqlのテストはここまで。最後に、Windows側のpgAdminから接続する設定をします。例えば下のように新規サーバを追加し、OKを押すと即座に接続を試みます。
↓ 警告が出ますが、内容は先ほどのpsqlと同じで「サーバの方がクライアントより新しく、いくつかの機能は使えないかもしれない」というもの。これが出れば既に接続成功した証拠です。二つ目の画像が、オブジェクトブラウザでサーバを開いたところ。PostGIS 2.2devの関数が1100以上ありました。
まとめと感想
- 自分の経験した中で最も簡単なインストール手順。ZIPをダウンロード&ダブルクリックするだけ。これでPostGISまで準備できるのはすごい。
- メニューバーにアイコンが出て、psql起動や簡単な設定ができるのは良さげ。その設定画面でデータフォルダも変更できるみたいで(下の画像)、これはWindowsより遥かに便利。
- 一方WindowsではスタックビルダからPostGIS + pgRoutingの「バンドル版」をインストールでき、公式サイトにあるOpenStreetMapインポート用のバイナリと合わせると、すぐ経路探索サーバになる。同じ環境をPostgres.appに追加する手間について、そのうち調べる。
- CentOSでは、iptablesなどでPostgreSQLへ外部からの接続要求を通す設定が必要だったけど、こちらは特に必要なかった。Firewallは有効にしてあるので、どうなっているのかな。とにかく簡単すぎて躓く点がなく、「まとめ」ること自体がない…。
- そう言えばWindows上のPostGISでは、gdal関連の環境変数設定で躓きやすかった。Postgres.appはどうなっているのか、今後調べる。