2013-02-22 45 views

回答

19

import在每个函数调用中都执行。如果您在函数体内使用import语句编写了一个正常的Python模块,并且在模块级别选择了对应模式,那么这与您将得到相同的行为。

是的,这会影响性能。

您可以解决此通过缓存进口这样的:

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之前发生。

+0

啊,只有在您的回答后,我在文档中查找到有全局字典SD。非常感谢你。 – Mauli 2013-02-22 14:15:46

+0

@Peter Eisentraut你知道在最近的pg版本中这个问题是否有任何改进? – 2016-06-30 23:04:33

+0

这没有任何变化。 – 2016-07-01 02:00:14