1

postgres(和greenplum)中的用户定义函数是独立运行的吗?当我使用 plpythonu 用户定义函数进行查询时,打开了多少个执行环境?运行查询时是否有任何共享的 python 解释器状态?

假设我有一个 plpython 用户定义函数:

CREATE OR REPLACE FUNCTION file2text(path string) RETURNS text AS $$
    f = open(path, 'r')
    return f.read()
    f.close()
$$ LANGUAGE plpythonu;

对于一个表create table files (name varchar, path varchar)和对该表的查询,如下所示:

SELECT f.name
FROM files f
WHERE character_length( file2text(f.path) ) > 4096
ORDER BY f.name

每次执行我的 plpython 函数都会产生一个新的 python 环境吗?在 MPP 数据库中,我可以假设 postgres 的行为在每个段之间重复,而段之间没有共享状态吗?

4

1 回答 1

3

PL/Python 状态在会话之间是隔离的,并在会话内共享。

您可以通过在sys模块中放置一个变量(仅用于测试!)或更好地在您导入的自定义模块中轻松测试它。您应该看到该变量对在同一会话(连接)中运行的其他函数可见,但对其他会话中的函数不可见。

于 2012-12-03T23:56:49.727 回答