Сколько сред выполнения plpython открывается в запросе?

Выполняются ли пользовательские функции в 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

Создается ли новая среда Python для каждого выполнения моей функции plpython? Могу ли я предположить, что в базах данных MPP поведение postgres будет дублироваться в каждом сегменте без общего состояния между сегментами?


person christangrant    schedule 03.12.2012    source источник


Ответы (1)


Состояние PL/Python изолировано между сеансами и совместно используется внутри сеанса.

Вы можете довольно легко проверить это, поместив переменную в модуль sys (только для тестирования!) или, что еще лучше, в пользовательский модуль, который вы импортируете. Вы должны увидеть, что переменная видна другим функциям, работающим в том же сеансе (соединении), но не видна функциям в других сеансах.

person Craig Ringer    schedule 03.12.2012