gpt4 book ai didi

postgresql - 从另一个 PL/Python block 调用 postgres PL/Python 存储函数

转载 作者:行者123 更新时间:2023-11-29 12:11:01 25 4
gpt4 key购买 nike

是否可以像普通 Python 函数一样从其他 PL/Python block 调用 PL/Python 函数。

例如,我有一个函数f1:

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

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

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

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

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

最佳答案

这里有更详细的答案:Reusing pure Python functions between PL/Python functions

我的方法是使用 PG 为您提供的 GD 和 SD 字典,more here .

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

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

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

你会在每个数据库 session 开始时调用 _meta,你的 python 函数将能够作为 GD["f1"]() 访问 f1 函数:

do $$
begin
...
t = GD["f1"]()
...
end;
$$ language 'plpython3u';

关于postgresql - 从另一个 PL/Python block 调用 postgres PL/Python 存储函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34764665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com