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 に答える