2

我正在运行 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/Python 函数是这样的:

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

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

对此有任何指示吗?谢谢

4

1 回答 1

2

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

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

等等

于 2013-11-14T03:59:59.223 回答