PL / Python错误:NameError:未定义全局名称“用户定义函数的名称”

时间:2013-11-14 01:24:07

标签: sql postgresql nested nameerror plpython

我正在运行Postgres 9.3,我正在尝试创建一个调用用户定义的sql函数的PL / Python函数,但在使用SELECT * FROM f2(TEXT1, TEXT2)调用函数后,我收到以下错误消息:

ERROR: NameError: global name 'f1' is not defined
SQL state: XX000
Context: Traceback (most recent call last):
PL/Python function "f2", line 1, in <module>
print f1() 
PL/Python function "f2"

sql函数如下所示:

CREATE FUNCTION f1(TEXT, TEXT) RETURNS SETOF some_tbl AS $$
 SELECT col1, col2, col3
 FROM some_other_tbl
 WHERE col1=$1 AND col2=$2
 GROUP BY col1;
$$ LANGUAGE 'sql';

PL / Pyhton的功能如下:

CREATE FUNCTION f2(TEXT, TEXT) RETURNS SETOF some_tbl
  AS $$ return f1() $$ 
  LANGUAGE 'plpython2u';

所以,似乎在f2中找不到f1,即使我可以自己调用它。

对此的任何指示都会受到赞赏吗?谢谢

1 个答案:

答案 0 :(得分:2)

它不起作用。 SQL函数不能直接调用为Python函数。 (它可能是一个简洁的功能,但没有实现任何类型。)如果你想从PL / Python调用SQL函数,你需要做

plpy.execute("SELECT f1(...)")