PL/Rの公式サイトに最新版8.13.0.6がUpdate for PostgreSQL 9.5dev compatibilityとあったので、9.5devとともに仮想環境に入れてみました。テスト用ストアド関数による出力です。↓
準備とPostgreSQL 9.5dev インストールまで
↓ 使ったもの一覧です。仮想化に、これまでのVMware PlayerからVirtualBoxのポータブル版に変えてみました(最新版4.3.26より前のバージョン。理由はWindows絡みで、今回は関係ないためいずれ別記事で)。PostgreSQLは5月26日時点のソースコード、Rはyum経由なので表では省略。
ホストOSWindows 7 32bit
ゲストOSの元centos-6.6-x86_64-minimal.iso
仮想化ソフトウェアPortable VirtualBox 4.3.6
PostgreSQL 9.5dev公式サイトのFile Browser → snapshot → dev
PL/R 8.13.0.6GitHubのプロジェクトページから
PostgreSQL 9.5devのインストールは、次の二つにならって簡単にできました。その下の画像はホストOSのWindowsからSSHで接続しているところ。 » PostgreSQL 9.4.0文書 : 第15章 ソースコードからインストール
» Qiita : junsukeさん : postgresインストール(ソースから)
今回、仮想マシンのネットワーク設定はNAT&ポートフォワーディングで、ホスト側のSSHとPostgreSQLへのリクエストを仮想側に転送しています。SSHは特に設定不要でつながった一方、PostgreSQLは、VirtualBoxのホスト機のアドレス10.0.2.2をpg_hba.confへ追加することが必要らしく、気付くまで少し手間取りました。この経過もそのうち別記事にします。
Rインストール
前のブログで書いた(CentOS 6.5にRを入れPostgreSQLへ接続)のと同様、最初にリポジトリ追加が必要でした。下の画像が起動時の様子で、バージョンは3.1.3。
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum -y install R
PL/Rインストール
PostgreSQL 9.3までのPL/Rならyumでインストールできますが、今回はソースコードから。PostgreSQL本体と同様、ドキュメントに手順が整理されており ↓ その通りで済みました。その下が今回実行したコマンドで、postgresql-9.5develというのはスナップショットを解凍したディレクトリ。make installまで無事終わると/usr/local/pgsql/lib/に共有ライブラリplr.soが、同じくpgsql/share/extension/にEXTENSIONインストール用ファイルができています。[追記6月13日]下のコマンドのうちpostgresql-のeが抜けていたのを修正しました
» PL/R User's Guide - Chaper2. Installation
wget https://github.com/jconway/plr/archive/master.zip
unzip master.zip # extracted into plr-master
mv plr-master plr
mv plr/ postgresql-9.5devel/contrib/
cd postgresql-9.5devel/contrib/plr
make
make install
Windowsではこの後に環境変数の設定とPostgreSQLサーバの再起動が必要でしたが、こちらでは不要でそのままCREATE EXTENSION plr;を実行できました。下は結果を確認した様子。
pgAdminでの接続と、テスト
先ほど書いたように今回はVirtualBoxのNATとポートフォワーディングを使い、具体的に言うとホストOSでの5436ポート → ゲストOSの5432という設定です。pgAdminへのサーバ追加はローカルホスト:5436として行い、下が接続した様子。pgAdminはポータブル版1.20で、PostgreSQLの方が新しいので警告ダイアログが出ます(二つ目の画像)。 ↓ テスト用にランダムな模様をプロットしてPNGファイルに出力するストアド関数。本体にRのコードをそのまま書きます。出力先の指定(png関数の引数)をファイル名だけにすると、PostgreSQLのデータディレトリ /usr/local/pgsql/data 下にPNGができます。コードの下は出力結果の再掲。
実際のテストでは、あらかじめホストOSとの共有フォルダをVirbualBoxで設定し、そこへの書き込み権限をユーザpostgresに与え、共有フォルダへのシンボリックリンクを/usr/local/pgsql/data 下に置いて出力先ディレクトリにしました。これで、ゲストOS上でPL/Rストアド関数を実行すると、結果のファイルがホストOS上に出来ます。詳細は、VirtualBoxのネットワーク設定の経過を別記事にする中で書きます。