Der gesuchte Parameter ist search_path
- das die Schemas auflistet, in denen eine Abfrage suchen wird. Sie können also so etwas tun:
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
Beachten Sie, dass Sie möglicherweise unerwartete Ergebnisse erhalten, wenn der Plan einer Abfrage im Hauptteil von foo() gespeichert wird. Ich würde empfehlen, Schemas für referenzierte Tabellen in plpgsql-Funktionen immer explizit aufzulisten, wenn Sie duplizierte Tabellen verwenden. Wenn nicht, stellen Sie sicher, dass Sie Tests eingerichtet haben, um das Verhalten mit einem sich ändernden Suchpfad zu überprüfen.
Oh - Sie können search_path auch explizit für den Hauptteil einer Funktion setzen - siehe die CREATE FUNCTION-Referenz des Handbuchs für Details.