(2)WindowsPostgreSQL 9.3(明日) (3)WindowsPostgreSQL 9.4(明後日) (4)CentOS 6.6 + PostgreSQL 9.3924日) (5)CentOS 7 + PostgreSQL 9.5 Alpha 1925日) (6)Scientific Linux 7 + PostgreSQL 9.5 Alpha 2926日) (7・終)Mac OS X 10.8.5 + PostgreSQL 9.5 Alpha 1927日)
Contents


実行環境、動機、関連サイト


PostgreSQL 9.2.9は、数年前にEnterpriseDB社のインストーラで入れたものを今年になって ↓ 手動でポータブル化したもの。詳細は下記にあります。


動機というか ↓ に書いた宿題(PL/pgSQLでは遅いのでPL/v8を試す)にようやく着手したので、まず手元にあるPostgreSQLの諸々のバージョンへのインストールを書きます。明日以降も続く予定。


今日の記事で参照したサイトは次の2つ。一つ目はWindowsPostgreSQL 9.2向けPL/v8バイナリファイルの情報。二つ目はPL/v8のドキュメント。



コンパイル済みファイルのダウンロード、配置

前項に挙げたPostgres OnLine Journalの記事は ↓ これで、Windows32bit・64bitそれぞれ用のPL/v8バイナリファイル(ZIPに圧縮)へのリンクがあります。


↓ 今回はOSに合わせ32bit版を使用。ZIPの中身はこんな感じ。インストールは手動で。といってもbin、lib、shareの各フォルダを、PostgreSQL 9.2のプログラムフォルダにコピーするだけです。


↓ これがPL/v8インストール前のプログラムフォルダ。一つあるバッチファイルは、PostgreSQLを手動でポータブル化した際に作成した起動用で、今回は特に関係ないです。


↓ コピーを始めたら、binフォルダ内のlibgcc_s_sjlj-1.dllが少し古いもの。とりあえず今回はPL/v8ZIPにある方で上書きしました。他にもいくつか同様のファイルあり。上書きしてもPostgreSQL起動やクエリは普通にできたので、今のところ問題なさそう。


PostgreSQL起動、データベースへインストール

PostgreSQLを自作のバッチファイル(523日の記事参照)で起動し、テスト用データベースを作成。ロケールはCにしました。以前、PL/RでロケールをJapanese_Japan.932にしていて日本語(というか非アスキー)関係で嵌まり、Cにしたら問題が解消したので。
CREATE DATABASE plv8_test
TEMPLATE = template0
LC_COLLATE = 'C'
LC_CTYPE = 'C';


テスト用データベースに接続し、CREATE EXTENSION一つであっさりインストールできました。アンインストールするならDROP EXTENSION。この拡張機能管理の仕組みは本当に便利。publicスキーマには何もオブジェクトができないので、自作の関数をpublicに置きやすいです(PL/Rと違って)。
# \c plv8_test

データベース "plv8_test" にユーザ"postgres"として接続しました。
CREATE EXTENSION plv8;

SELECT extname, extversion FROM pg_extension;

 extname | extversion
---------+------------
 plpgsql | 1.0
 plv8    | 1.3.0
(2 行)


簡単なテスト(無名コードブロック、日本語、他)

↓ はPL/v8のドキュメントの例とほぼ同じで、無名コードブロック(DO文)でのテスト。通常のSQLと一緒にできるDO文の中でJavaScriptのコードを実行できます。引数や戻り値は使えませんが、メッセージ出力はplv8.elog関数で可能。メッセージレベルはINFO、NOTICEなど色々あります。
DO LANGUAGE plv8 $$
    plv8.elog(INFO,
        'this', 'is', 'inline', 'code')
$$;
INFO:  this is inline code

↓ 以下、Dateオブジェクト、日本語文字列とsplitによる分割結果(配列)の表示、Mathオブジェクトのテスト。いずれも特に問題なくできました。
DO LANGUAGE plv8 $$
    now = new Date;
    plv8.elog(INFO, now);
$$;
INFO:  Mon Sep 21 2015 21:24:13 GMT+0900 (東京 (標準時))
DO LANGUAGE plv8 $$
    var str = 'あいうえおかきくけこ';
    plv8.elog(INFO, str.split(''));
$$;
INFO:  あ,い,う,え,お,か,き,く,け,こ
DO LANGUAGE plv8 $$
    var rand = Math.random();
    plv8.elog(INFO, rand);
$$;
INFO:  0.8915615507867187

明日以降のPostgerSQL 9.3、9.4ほかへのインストールもあっさりできそうで、面白味はないと思いますが環境構築メモの一環として、何回か続けて書きます。