On Tue, 13 Mar 2012 23:18:08 +0100 Jo Mateix <2uol...@gmail.com> wrote:
> Creo esta función en esquema public : > > CREATE OR REPLACE FUNCTION zz() > RETURNS text AS > $BODY$ > DECLARE > declare resultado varchar(35); > BEGIN > > select titulo into resultado > from empresas; > > return resultado; > END; > $BODY$ > LANGUAGE plpgsql VOLATILE > COST 100; > ALTER FUNCTION zz() > OWNER TO postgres; > > set search_path=esquema1,public; > select * from empresas; -- Me devuelve > correctamente el nombre de la empresa en esquema1 > select zz(); -- Me devuelve > correctamente el nombre de la empresa en esquema1 > > set search_path=esquema2,public; > select * from empresas; -- Me devuelve > correctamente el nombre de la empresa en esquema2 > select zz(); *Sigue devolviendo el > nombre de esquema1, porque?* > Por mucho que cambie el esquema con search_path, si no cierro la > sesión, la función zz() siempre se ejecuta en el esquema1. > Si cierro la sesión y la función se ejecuta primero en esquema2 > devuelve el resultado de este pero ya es imposible ejecutarla y que > devuelva el resultado del esquema1. > > Es posible forzarle el esquema sobre el cual debe actuar? o bien > limpiar la memoria que se queda de la primera ejecución sin necesidad > de cerrar la sesión? > Cambia: select titulo into resultado from empressas Por: EXECUTE SELECT titulo FROM empresas INTO resultado Esto va a hacer que plpgsql no guarde el plan que usa para la consulta y por lo tanto no tenga nada para reutilizar Espero que te sirva y que este correcto porque no tuve tiempo de probarlo.... Saludos Rodrigo - Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org) Para cambiar tu suscripci�n: http://www.postgresql.org/mailpref/pgsql-es-ayuda