¿Cómo se manejan las declaraciones de importación en plpython?

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 statement 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.