我想找到执行存储脚本的最佳方法,该脚本将对提供的数据进行计算。 我需要将这些脚本作为列表存储在表中。
例如
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动作)
另外,我不想为每个脚本创建存储过程。
答案 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)