Festlegen des Postgresql-Schemapfads

135

Ich muss den Schemapfad in Postgres festlegen, damit ich nicht jedes Mal eine Schemapunkttabelle spezifiziere, z schema2.table. Schemapfad festlegen:

SET SCHEMA PATH a,b,c

scheint nur für eine Abfragesitzung auf dem Mac zu funktionieren, nachdem ich das Abfragefenster geschlossen habe, setzt sich die Pfadvariable auf den Standard zurück.

Wie kann ich es dauerhaft machen?

Nakh
quelle
Ich denke ist SET search_path TO a, b, c; wie die Antwort sagt und nicht SET SCHEMA PATH a, b, c;
Armando

Antworten:

168

(Und wenn Sie keinen Administratorzugriff auf den Server haben)

ALTER ROLE <your_login_role> SET search_path TO a,b,c;

Zwei wichtige Dinge, die Sie wissen sollten:

  1. Wenn ein Schemaname nicht einfach ist, muss er in doppelte Anführungszeichen gesetzt werden.
  2. Die Reihenfolge, in der Sie Standardschemas festlegen, ist a, b, cwichtig, da auch die Reihenfolge festgelegt wird, in der die Schemas nach Tabellen durchsucht werden. Wenn Sie also denselben Tabellennamen in mehr als einem Schema unter den Standardeinstellungen haben, gibt es keine Mehrdeutigkeit. Der Server verwendet immer die Tabelle aus dem ersten Schema, das Sie für Ihr Schema angegeben haben search_path.
Milen A. Radev
quelle
19
Es ist auch erwähnenswert, explizit KEINE Anführungszeichen um die Aufzählung a, b, c zu verwenden. Hand an Stirn für die letzten 15 Minuten ...
Jmoney38
4
@ Jmoney38 Für nicht einfache Schemanamen sind keine einfachen Anführungszeichen, sondern doppelte Anführungszeichen erforderlich.
Vitaly-t
136

Sie können den Standard search_pathauf Datenbankebene festlegen :

ALTER DATABASE <database_name> SET search_path TO schema1,schema2;

Oder auf Benutzer- oder Rollenebene:

ALTER ROLE <role_name> SET search_path TO schema1,schema2;

Wenn Sie in allen Ihren Datenbanken ein gemeinsames Standardschema haben, können Sie den systemweiten Standard in der Konfigurationsdatei mit der Option search_path festlegen .

Wenn eine Datenbank erstellt wird, wird sie standardmäßig aus einer versteckten "Vorlagendatenbank" mit dem Namen template1 erstellt . Sie können diese Datenbank ändern, um einen neuen Standardsuchpfad für alle zukünftig erstellten Datenbanken anzugeben. Sie können auch eine andere Vorlagendatenbank erstellen und CREATE DATABASE <database_name> TEMPLATE <template_name>zum Erstellen Ihrer Datenbanken verwenden.

Joshperry
quelle
9
Für diejenigen, die sich über die psql-Befehlszeile wundern, können Sie Schemas von \ dn
BKSpurgeon
3
Sie müssen die Sitzung trennen und erneut eine Verbindung herstellen, damit die Einstellungen wirksam werden.
Isapir
Oh, segne dich. kam von SQL Server zu PG, also ist das alles neu (und seltsam) für mich
Nate Anderson
24

Josh hat recht, aber er hat eine Variante ausgelassen:

ALTER ROLE <role_name> IN DATABASE <db_name> SET search_path TO schema1,schema2;

Legen Sie den Suchpfad für den Benutzer in einer bestimmten Datenbank fest.

Chris Johnson
quelle
sehr nützlich auch. Vielen Dank
Alejandro Teixeira Muñoz