Ich lese Oreillys PostgreSQL: Up and Running und im Abschnitt Organisieren Ihrer Datenbank mithilfe von Schemas heißt es, dass search_path
dies auf Datenbankebene festgelegt werden kann:
Wenn beispielsweise alle Objekte in Contrib ohne Schemaqualifizierung zugänglich sein sollen, ändern wir unsere Datenbank wie folgt:
ALTER DATABASE mydb SET search_path="$user",public,contrib;
Nachdem ich den obigen Befehl eingegeben habe, kann ich jedoch immer noch nicht auf Tabellen in anderen Schemas verweisen, public
ohne sie zu qualifizieren:
ALTER DATABASE auth SET search_path="$user",public,staging;`
\d users
Gibt:
Did not find any relation named "users".
Aber wenn ich benutze \d staging.users
, funktioniert es.
SHOW search_path;
Gibt:
search_path
----------------
"$user",public
Überschreibt die Standardeinstellung search_path
von postgresql.conf
den Wert pro Datenbank, mit dem festgelegt wurde ALTER DATABASE ... SET search_path
? Wenn dies der Fall ist, wozu dient der Wert pro Datenbank?
quelle
select * from users
?select * from users
aber ich kannselect * from staging.users
.search_path
? Haben Sie versucht, nur diesearch_path
für Ihre Verbindung einzustellen?ANSI
SQL-Modus eingestellt). (Kommentar hier, da Sie ihn dort nicht sehen würden. Ich werde dies löschen Kommentar später)Antworten:
Das Zitat aus dem
SET
zugehörigen Absatz desALTER DATABASE
Dokumentationsabschnitts lautet "Immer wenn anschließend eine neue Sitzung in dieser Datenbank gestartet wird, wird der angegebene Wert zum Standardwert der Sitzung". Die Änderungen werden daher nur für neue Sitzungen wirksam. Sie müssen nur die Verbindung wiederherstellen.quelle
SET search_path TO "$user",public,contrib;
.