Il parametro che stai cercando è search_path
- che elenca gli schemi in cui cercherà una query. Quindi, puoi fare qualcosa del tipo:
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
Nota che se il piano di una query viene salvato all'interno del corpo di foo(), potresti ottenere risultati inaspettati. Consiglierei di elencare sempre in modo esplicito gli schemi per le tabelle referenziate nelle funzioni plpgsql se si utilizzano tabelle duplicate. In caso contrario, assicurati di avere dei test in atto per verificare il comportamento con un percorso_ricerca che cambia.
Oh, puoi anche impostare in modo esplicito search_path per il corpo di una funzione:per i dettagli, consulta il riferimento CREATE FUNCTION del manuale.