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? Versión postgres 8.3 Muchas gracias, Jordi
