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 の動作が各セグメント間で複製され、セグメント間で状態が共有されていないと想定できますか?