pgSql存储数据操作/计算脚本

时间:2015-06-05 10:22:49

标签: postgresql

我想找到执行存储脚本的最佳方法,该脚本将对提供的数据进行计算。 我需要将这些脚本作为列表存储在表中。

例如

id|name|script
1|adition dataA.val1 to dataA.val2|var arrayResult; foreach(row in dataA) arrayResult.add(row.val1+row.val2); return arrayResult;
2|....

然后我们将使用通用函数来执行带有提供数据的脚本

CREATE OR REPLACE FUNCTION eg.evaluateScript(
    IN script text,
    IN dataA ???,
    IN dataB ???,
    IN dataC ???,
  RETURNS result AS
$BODY$
DECLARE
BEGIN

    ... here we have a process to make data manipulation base on script applied to dataA, dataB and dataC ...

    RETURN result;
END;
$BODY$

当然这个脚本应该只能进行数据计算/操作(没有选择任何表,插入,更新或任何与数据操作无关的pgSql动作)

另外,我不想为每个脚本创建存储过程。

1 个答案:

答案 0 :(得分:0)

经过一番研究,我找到了扩展PL / V8,这是一个Javascript引擎。在那里,我可以使用js函数eval来执行文本源代码。

create or replace function
js(src text, input json) returns json as $$
  var evalRes = eval(src + ' output;');
  return JSON.stringify(evalRes);
$$ LANGUAGE plv8;

select js('var a = input.test; var output = []; for(k in a) { output.push(10+a[k]); };', '{"test": [1,2,3]}'::json)