¿Cómo se manejan las declaraciones de importación en plpython?
json postgresql (1)
Tengo una función plypython que hace algo de json magic. Para esto obviamente importa la biblioteca json.
¿Se llama la importación en cada llamada a la función? ¿Hay alguna implicación de rendimiento que deba tener en cuenta?
La import
se ejecuta en cada llamada de función. Este es el mismo comportamiento que obtendría si escribiera un módulo de Python normal con la declaración de import
dentro del cuerpo de una función como opuesto a nivel de módulo.
Sí, esto afectará el rendimiento.
Puedes solucionar esto almacenando en caché tus importaciones de esta manera:
CREATE FUNCTION test() RETURNS text
LANGUAGE plpythonu
AS $$
if ''json'' in SD:
json = SD[''json'']
else:
import json
SD[''json''] = json
return json.dumps(...)
$$;
Es cierto que esto no es muy bonito, y se están discutiendo mejores formas de hacerlo, pero no sucederán antes de PostgreSQL 9.4.