El parámetro que está buscando es search_path
- que enumera los esquemas en los que buscará una consulta. Por lo tanto, puede hacer algo como:
CREATE TABLE schema1.tt ...
CREATE TABLE schema2.tt ...
CREATE FUNCTION schema1.foo() ...
CREATE FUNCTION schema2.foo() ...
SET search_path = schema1, something_else;
SELECT * FROM tt; -- schema1.tt
SELECT * FROM schema2.tt -- schema2.tt
SELECT foo(); -- calls schema1.foo
SELECT schema2.foo(); -- calls schema2.foo
Tenga en cuenta que si el plan de una consulta se guarda dentro del cuerpo de foo(), entonces puede obtener resultados inesperados. Le recomendaría que siempre enumere explícitamente los esquemas para las tablas a las que se hace referencia en las funciones plpgsql si está utilizando tablas duplicadas. De lo contrario, asegúrese de realizar pruebas para verificar el comportamiento con una ruta_de_búsqueda cambiante.
Ah, también puedes establecer explícitamente search_path para el cuerpo de una función; consulta la referencia CREATE FUNCTION del manual para obtener más información.