我正在运行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,即使我可以自己调用它。
对此的任何指示都会受到赞赏吗?谢谢
答案 0 :(得分:2)
它不起作用。 SQL函数不能直接调用为Python函数。 (它可能是一个简洁的功能,但没有实现任何类型。)如果你想从PL / Python调用SQL函数,你需要做
plpy.execute("SELECT f1(...)")
等