PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Verwenden von Schemas in Postgresql

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.