実行環境、動機、関連サイト
- Windows7 32bit + PostgreSQL 9.2.9
- ConEmu Build 150513でpsqlを使用
PostgreSQL 9.2.9は、数年前にEnterpriseDB社のインストーラで入れたものを今年になって ↓ 手動でポータブル化したもの。詳細は下記にあります。
動機というか ↓ に書いた宿題(PL/pgSQLでは遅いのでPL/v8を試す)にようやく着手したので、まず手元にあるPostgreSQLの諸々のバージョンへのインストールを書きます。明日以降も続く予定。
今日の記事で参照したサイトは次の2つ。一つ目はWindows版PostgreSQL 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/v8のZIPにある方で上書きしました。他にもいくつか同様のファイルあり。上書きしてもPostgreSQL起動やクエリは普通にできたので、今のところ問題なさそう。
PostgreSQL起動、データベースへインストール
↓ PostgreSQLを自作のバッチファイル(5月23日の記事参照)で起動し、テスト用データベースを作成。ロケールは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ほかへのインストールもあっさりできそうで、面白味はないと思いますが環境構築メモの一環として、何回か続けて書きます。