可以从 plv8 函数中调用另一个模式中的函数吗?

It's possible to call functions in another schema from within plv8 functions?

我正在尝试使用 plv8 编写 postgres 函数。现在我想像这样使用 pgcrypt 库:

CREATE OR REPLACE FUNCTION v01.myfunction(arg json) 
RETURNS json AS
$BODY$
  var res;
  res = obj.crypt(arg.password, res);
  plv8.elog(NOTICE, res);
  ...

$BODY$
LANGUAGE plv8;

其中 crypt 随 pgcrypt 库一起提供并在另一个模式中找到。但是如果 运行 我得到错误:

ERROR:  ReferenceError: obj is not defined

有什么想法吗?谢谢!

可以在其他模式中调用其他 PLV8 函数,是的。

不过您没有正确调用该函数。使用

var myFunction = plv8.find_function("schemaName.functionName")

var result = myFunction();

据我所知,你只能这样调用其他 PLV8 函数,而不是 PLPGSQL。

您可以使用plv8.execute("select someFunctionInAnotherLanguage()")

好的,我找到了:

var pp = plv8.execute("SELECT obj.crypt(,)",[arg.password, cpw]);

简单 :-)