Postgresql下plv8安装过程其实很简单,但是在网络上搜集了半天都没有找到一篇满意的安装文档,现在总结如下:
1.下载和PostgreSQL相对应的plv8版本,下载地址如下:
http://www.postgresonline.com/journal/archives/280-PLV8-1.3-windows-binaries-for-PostgreSQL-9.2.html
解压后
2.将bin、lib、share文件夹下文件分别复制到PostgreSQL的安装目录下:
3.打开PostgreSQL SQL编辑器,执行下列sql语句:
CREATE EXTENSION plv8;
CREATE EXTENSION plls;
CREATE EXTENSION plcoffee;
4.在SQL编辑器中执行
CREATE OR REPLACE FUNCTION upsert_inventory(param_inv json) RETURNS
text AS $$
var o = JSON.parse(param_inv);
/** update plan **/
var uplan = plv8.prepare('UPDATE inventory SET prod_name = $1, loc_id = $2 WHERE prod_code = $3', ['text', 'int', 'text'] );
/** insert plan **/
var iplan = plv8.prepare('INSERT INTO inventory( prod_name, loc_id, prod_code) VALUES($1, $2, $3)', ['text', 'int', 'text'] );
var num_changed;
var num_ins = 0, num_upd = 0;
if (typeof o != 'object')
return NULL;
else {
for(var i=0; i<o.length; i++){
num_changed = uplan.execute([o[i].prod_name, o[i].loc_id, o[i].prod_code]);
num_upd += num_changed;
if (num_changed == 0){ /** we got no updates, so insert **/
num_changed = iplan.execute([o[i].prod_name, o[i].loc_id, o[i].prod_code]);
num_ins += num_changed;
}
}
}
iplan.free();
uplan.free();
return num_upd + ' record(s) updated and ' + num_ins + ' records inserted';
$$ LANGUAGE plv8 VOLATILE;
发现能执行成功。
总结:postgresql存储过程可以和很多语言嵌套使用,像Python,js等。