Ответ 1
import
выполняется при каждом вызове функции. Это то же поведение, которое вы получили бы, если бы вы написали обычный модуль Python с выражением import
внутри тела функции, как это было на уровне модуля.
Да, это повлияет на производительность.
Вы можете обойти это, кэшируя свой импорт следующим образом:
CREATE FUNCTION test() RETURNS text
LANGUAGE plpythonu
AS $$
if 'json' in SD:
json = SD['json']
else:
import json
SD['json'] = json
return json.dumps(...)
$$;
Это, по общему признанию, не очень красиво, и обсуждаются лучшие способы сделать это, но они не произойдут до PostgreSQL 9.4.