2

是否可以从其他 PL/Python 块调用 PL/Python 函数作为普通 Python 函数。

例如,我有一个函数 f1:

create or replace function f1() returns text as $$
    return "hello"
$$ language 'plpython3u';

我想从其他函数或块调用这个函数,例如这个匿名块:

do $$
begin
    ...
    t = f1()
    ...
end;
$$ language 'plpython3u';

这可以使用 来完成t = plpy.execute("select f1()"),但如果可能的话,我希望将其作为普通 Python 函数调用以避免类型转换(例如 jsonb 等)。

(我正在使用 plpython3u ~ Python 3)。

4

1 回答 1

4

更详细的答案在这里:在 PL/Python 函数之间重用纯 Python 函数

我解决这个问题的方法是使用 PG 为您提供的 GD 和 SD 字典,更多信息请点击此处

我通常有一个函数来准备我的环境,然后我可以使用纯 python 函数而没有开销。在你的情况下,这看起来像:

create or replace function _meta() returns bool as $$
  def f1():
    return "hello"

  GD["f1"] = f1
  return True
$$ language 'plpython3u';

您将在每个 DB 会话开始时调用 _meta,并且您的 python 函数将能够访问 f1 函数GD["f1"]()

do $$
begin
    ...
    t = GD["f1"]()
    ...
end;
$$ language 'plpython3u';
于 2016-02-07T18:37:16.880 回答