2013-02-22 19 views
14

Ho una funzione plypython che fa un po 'di magia json. Per questo ovviamente importa la libreria JSON.Come vengono gestite le istruzioni import in plpython?

L'importazione è stata richiamata su ogni chiamata alla funzione? Ci sono delle implicazioni sulle prestazioni di cui devo essere a conoscenza?

risposta

19

Il import viene eseguito su ogni chiamata di funzione. Questo è lo stesso comportamento che si otterrebbe se si scrivesse un normale modulo Python con l'istruzione import all'interno di un corpo di una funzione come optabile a livello di modulo.

Sì, questo influirà sulle prestazioni.

È possibile aggirare il problema caching vostre importazioni in questo modo:

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

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

Questo non è certamente molto carina, e modi migliori per fare questo sono in fase di discussione, ma non avverrà prima di PostgreSQL 9.4.

+0

Ah, solo dopo la tua risposta ho cercato nella documentazione che esiste un dizionario globale SD. Grazie mille. – Mauli

+0

@Peter Eisentraut sai se ci sono stati miglioramenti a questo problema nelle recenti versioni di pg? –

+0

Non ci sono state modifiche a questo. –

Problemi correlati