Параметърът, който търсите, е search_path
- който изброява схемите, в които ще търси заявката. Така че можете да направите нещо като:
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
Имайте предвид, че ако планът на заявка бъде запазен в тялото на foo(), тогава може да получите неочаквани резултати. Бих препоръчал винаги изрично да изброявате схеми за референтни таблици във функциите на plpgsql, ако използвате дублирани таблици. Ако не, уверете се, че разполагате с тестване, за да проверите поведението с променящ се search_path.
О, можете изрично да зададете search_path и за тялото на функцията - вижте справката CREATE FUNCTION в ръководството за подробности.