Contents
(1)Windows 版 PostgreSQL 9.2( 9 月21 日)(2)Windows 版 PostgreSQL 9.3( 9 月22 日)(3)Windows 版 PostgreSQL 9.4( 9 月23 日)(4)CentOS 6.6 + PostgreSQL 9.3(一昨日) (5)CentOS 7 + PostgreSQL 9.5 Alpha 1(昨日) (6)Scientific Linux 7 + PostgreSQL 9.5 Alpha 2(昨日) - 実行環境
- v8
を Homebrew でインストール - PL/v8
をビルド(Postgres.app に付いてて不要だった) - データベースへインストール、ウィンドウ関数作成テスト
- まとめのまとめ
実行環境
- MacBook Pro 15-inch Mid 2012(OS X 10.8.5 Mountain Lion)+ PostgreSQL 9.5 Alpha 1
- PostgreSQL 9.5 Alpha 1
は Postgres.app を使用(詳細:9月 6 日の記事) - 操作は
Windows 7 32bit + ConEmu Build 150513 + SSH、psql
v8 を Homebrew でインストール
作業前にちゃんと確認すべきでしたが、とりあえずHomebrew
brew install v8 brew install readline brew info v8 v8: stable 4.5.103.35 Google's JavaScript engine https://code.google.com/p/v8/ /usr/local/Cellar/v8/4.1.0.27 (24 files, 29M) * Poured from bottle From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/v8.rb ==> Dependencies Optional: readline ✔ ==> Options --with-readline Use readline instead of libedit
PL/v8 をビルド(Postgres.app に付いてて不要だった)
これは間抜けな話で、今回の- plv8
を OSX でビルド出来た Postgres.app 編(2013.7.12)
↓ 実行したコマンド。V8_OUTDIR
git clone https://github.com/plv8/plv8.git export PATH=/Applications/Postgres.app/Contents/Versions/9.5/bin:$PATH export V8_OUTDIR=/usr/local/Cellar/v8/4.1.0.27/out/native/ export V8_SRCDIR=/usr/local/Cellar/v8/4.1.0.27/ cd plv8 make make install
上記実行後、ライブラリ(plv8.so)や
ls -lt /Applications/Postgres.app/Contents/Versions/9.5/share/postgresql/extension
必須か分かりませんが念のため
/Applications/Postgres.app/Contents/Versions/9.5/bin/pg_ctl restart -D ~/Library/Application\ Support/Postgres/var-9.5 # just one line actually
データベースへインストール、ウィンドウ関数作成テスト
ここからはpsql -U "user" -h xxx.xxx.xxx.xxx SELECT version(); version ---------------------------------------------------------------- PostgreSQL 9.5alpha1 on x86_64-apple-darwin14.3.0, compiled by Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0sv n), 64-bit (1 行) CREATE DATABASE plv8_test TEMPLATE template0 ENCODING 'UTF-8' LC_COLLATE 'C' LC_CTYPE 'C';
\c plv8_test
CREATE EXTENSION plv8; SELECT extname, extversion FROM pg_extension; extname | extversion ---------+------------ plpgsql | 1.0 plv8 | 1.5.0-dev1 (2 行)
テストとして、昨日と同じウィンドウ関数を作成。第
CREATE OR REPLACE FUNCTION partial_accum( v1 int, v2 int ) RETURNS int[] LANGUAGE plv8 IMMUTABLE WINDOW AS $$ var w = plv8.get_window_object(), obj = w.get_partition_local(); if (v1 < v2) { w.set_partition_local({ "val": [] }); return null; } else { if (w.get_current_position() === 0 || obj[ "val" ].length === obj = { "val": [ v1 ] }; } else { obj[ "val" ].push( v1 ); } w.set_partition_local( obj ); return obj[ "val" ]; } $$;
テスト用ダミーテーブルを作り実行。結果には特に意味ありません。
CREATE TABLE dummy AS SELECT round(random() * 30) AS num FROM generate_series(1, 20);
SELECT num, partial_accum(num :: int, 10) over() FROM dummy; num | partial_accum -----+------------------ 18 | {18} 13 | {18,13} 17 | {18,13,17} 24 | {18,13,17,24} 2 | 26 | {26} 30 | {26,30} 23 | {26,30,23} 20 | {26,30,23,20} 6 | 25 | {25} 10 | {25,10} 17 | {25,10,17} 13 | {25,10,17,13} 13 | {25,10,17,13,13} 5 | 7 | 26 | {26} 3 | 12 | {12} (20 行)
まとめのまとめ
- RedHat 7
系(CentOS と SL7)は、アルファ版の PostgreSQL 9.5 に対しても既にインストール用パッケージがあるほどで、最も手軽。 - Mac
では、Postgres.app なら最初から付いているので、後は v8 さえあればたぶん簡単。今回は無駄に自力でビルドしてしまい、とりあえず動いてよかった。 - Windowsでは、PostgreSQL 9.2~9.4ならZIPを解凍してコピーするだけ。ただしZIPへのリンクがまとまってなく、Postgres Online Journal
の記事から探すのがネックかも。9.5は現時点ではポスグレ本体から自力でビルドする必要があり、別問題。 - OS
または PostgreSQL によって今回入れた PL/v8 のバージョンが違い(1.3.0、1.4.x、1.5.0-dev1)、機能に差があるかは未調査。少なくとも 1.4.x で、PL/v8 ならではの Typed Array とウィンドウ関数作成が使えることは分かりました。