1

postgres (および greenplum) のユーザー定義関数は分離して実行されますか? plpythonu ユーザー定義関数を使用したクエリがある場合、いくつの実行環境が開いていますか? クエリの実行時に、共有された Python インタープリターの状態はありますか?

plpython ユーザー定義関数があるとします。

CREATE OR REPLACE FUNCTION file2text(path string) RETURNS text AS $$
    f = open(path, 'r')
    return f.read()
    f.close()
$$ LANGUAGE plpythonu;

テーブルcreate table files (name varchar, path varchar)とそのテーブルに対するクエリの場合、次のようになります。

SELECT f.name
FROM files f
WHERE character_length( file2text(f.path) ) > 4096
ORDER BY f.name

plpython 関数を実行するたびに、新しい Python 環境が生成されますか? MPP データベースでは、postgres の動作が各セグメント間で複製され、セグメント間で状態が共有されていないと想定できますか?

4

1 に答える 1

3

PL/Python の状態はセッション間で分離され、セッション内で共有されます。

sysモジュールに変数を配置することで(テストのみ!)、またはインポートするカスタムモジュールに変数を配置することで、非常に簡単にテストできます。変数は、同じセッション (接続) 内で実行される他の関数には表示されますが、他のセッションの関数には表示されないことがわかります。

于 2012-12-03T23:56:49.727 に答える