从另一个 PL/Python 块调用 postgres PL/Python 存储函数
2016-01-13
2577
是否可以从其他 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)。
1个回答
更多详细答案请见此处: 在 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 函数将能够以
GD["f1"]()
的形式访问 f1 函数:
do $$
begin
...
t = GD["f1"]()
...
end;
$$ language 'plpython3u';
Drazen Urch
2016-02-07