2013-02-22 10 views
14

Bazı json sihirlerini yapan bir plypython işlevim var. Bunun için açıkça json kütüphanesini ithal ediyor.Plpython'daki içe aktarma ifadeleri nasıl işlenir?

İçe aktarma, işleve yapılan her çağrıya çağrılıyor mu? Farkında olmak zorunda olduğum herhangi bir performans çıkarımı var mı?

cevap

19

Her işlev çağrısında import yürütülür. Bu, modül seviyesinde olduğu gibi bir işlev gövdesinde import ifadesiyle normal bir Python modülü yazdıysanız alacağınız aynı davranıştır.

Evet, bu performansı etkileyecektir.

CREATE FUNCTION test() RETURNS text 
LANGUAGE plpythonu 
AS $$ 
if 'json' in SD: 
    json = SD['json'] 
else: 
    import json 
    SD['json'] = json 

return json.dumps(...) 
$$; 

Bu kuşkusuz çok güzel değildir ve bu görüşülmektedir yapmak için daha iyi yollar, ancak PostgreSQL 9.4 önce olmayacak:

Böyle ithalatlarınızı önbelleğe alarak bu çalışabilirsiniz.

+0

Ah, sadece cevabınızdan sonra, küresel bir sözlük SD'si olduğunu belgelere baktım. Çok teşekkür ederim. – Mauli

+0

@Peter Eisentraut, son pn sürümlerinde bu sorunla ilgili herhangi bir gelişme olup olmadığını biliyor musunuz? –

+0

Bunun için herhangi bir değişiklik yapılmadı. –