PL/Rの公式サイトに最新版8.13.0.6Update for PostgreSQL 9.5dev compatibilityとあったので、9.5devとともに仮想環境に入れてみました。テスト用ストアド関数による出力です。↓

準備とPostgreSQL 9.5devインストールまで
↓ 使ったもの一覧です。仮想化に、これまでのVMware PlayerからVirtualBoxのポータブル版に変えてみました(最新版4.3.26より前のバージョン。理由はWindows絡みで、今回は関係ないためいずれ別記事で)。PostgreSQL526日時点のソースコード、Ryum経由なので表では省略。
ホストOSWindows 7 32bit
ゲストOSの元centos-6.6-x86_64-minimal.iso
仮想化ソフトウェアPortable VirtualBox 4.3.6
PostgreSQL 9.5dev公式サイトのFile Browsersnapshotdev
PL/R 8.13.0.6GitHubのプロジェクトページから

PostgreSQL 9.5devのインストールは、次の二つにならって簡単にできました。その下の画像はホストOSWindowsからSSHで接続しているところ。

»PostgreSQL 9.4.0文書:15章 ソースコードからインストール
»Qiita : junsukeさん: postgresインストール(ソースから)


今回、仮想マシンのネットワーク設定はNAT&ポートフォワーディングで、ホスト側のSSHPostgreSQLへのリクエストを仮想側に転送しています。SSHは特に設定不要でつながった一方、PostgreSQLは、VirtualBoxのホスト機のアドレス10.0.2.2pg_hba.confへ追加することが必要らしく、気付くまで少し手間取りました。この経過もそのうち別記事にします。

Rインストール
前のブログで書いた(CentOS 6.5Rを入れ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インストール用ファイルができています。[追記613日]下のコマンドのうち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での接続と、テスト
先ほど書いたように今回はVirtualBoxNATとポートフォワーディングを使い、具体的に言うとホストOSでの5436ポート → ゲストOS5432という設定です。pgAdminへのサーバ追加はローカルホスト:5436として行い、下が接続した様子。pgAdminはポータブル版1.20で、PostgreSQLの方が新しいので警告ダイアログが出ます(二つ目の画像)。

↓ テスト用にランダムな模様をプロットしてPNGファイルに出力するストアド関数。本体にRのコードをそのまま書きます。出力先の指定(png関数の引数)をファイル名だけにすると、PostgreSQLのデータディレトリ/usr/local/pgsql/data下にPNGができます。コードの下は出力結果の再掲。
CREATE OR REPLACE FUNCTION test.plot()
RETURNS void LANGUAGE plr IMMUTABLE AS
$$
# e.g.
# SELECT test.plot();

lab = paste(collapse='\n', c(
    'PostgreSQL 9.5dev',
    'and PL/R 8.13.0.6',
    '',
    'on CentOS 6.6'))

png('Rplots.png')
par(lheight=1.4)
n = 100
plot(
    cex=runif(n) * 10,
    col=adjustcolor(topo.colors(n), 0.15),
    pch=16,
    x=runif(n), y=runif(n),
    xlim=0:1, ylim=0:1)
text(
    cex=2,
    font=2,
    label=lab,
    x=0.5, y=0.5)
graphics.off()
$$;

SELECT test.plot();


実際のテストでは、あらかじめホストOSとの共有フォルダをVirbualBoxで設定し、そこへの書き込み権限をユーザpostgresに与え、共有フォルダへのシンボリックリンクを/usr/local/pgsql/data下に置いて出力先ディレクトリにしました。これで、ゲストOS上でPL/Rストアド関数を実行すると、結果のファイルがホストOS上に出来ます。詳細は、VirtualBoxのネットワーク設定の経過を別記事にする中で書きます。