2

PL/Python 関数を他の PL/Python ブロックから通常の Python 関数として呼び出すことはできますか?

たとえば、関数 f1 があります。

create or replace function f1() returns text as $$
    return "hello"
$$ language 'plpython3u';

この関数を他の関数またはブロック、たとえばこの無名ブロックから呼び出したい:

do $$
begin
    ...
    t = f1()
    ...
end;
$$ language 'plpython3u';

これは を使用して実行できますがt = plpy.execute("select f1()")、可能であれば、通常の Python 関数として呼び出して、型変換 (jsonb など) を回避したいと考えています。

(私はplpython3u〜Python 3を使用しています)。

4

1 に答える 1

4

詳細な回答はこちら: PL/Python 関数間で純粋な Python 関数を再利用する

私がこれにアプローチする方法は、PG が提供する GD および SD 辞書を使用することです

私は通常、自分の環境を準備する関数を 1 つ持っており、オーバーヘッドなしで純粋な python 関数を使用できます。あなたの場合、これは次のようになります。

create or replace function _meta() returns bool as $$
  def f1():
    return "hello"

  GD["f1"] = f1
  return True
$$ language 'plpython3u';

各 DB セッションの開始時に _meta を呼び出すと、Python 関数は次のように f1 関数にアクセスできますGD["f1"]()

do $$
begin
    ...
    t = GD["f1"]()
    ...
end;
$$ language 'plpython3u';
于 2016-02-07T18:37:16.880 に答える