Ustaw na stałe ścieżkę schematu Postgresql

141

Muszę ustawić ścieżkę schematu w Postgres, aby nie za każdym razem określać tabelę kropek schematu, np schema2.table. Ustaw ścieżkę schematu:

SET SCHEMA PATH a,b,c

wydaje się działać tylko dla jednej sesji zapytań na Macu, po zamknięciu okna zapytania zmienna ścieżki ustawia się z powrotem na wartość domyślną.

Jak mogę to uczynić na stałe?

Nakh
źródło
Myślę, że SET search_path TO a, b, c; jak mówi odpowiedź, a nie USTAW ŚCIEŻKĘ SCHEMATU a, b, c;
Armando

Odpowiedzi:

173

(A jeśli nie masz dostępu administratora do serwera)

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

Dwie ważne rzeczy, o których należy wiedzieć:

  1. Jeśli nazwa schematu nie jest prosta, należy ją ująć w podwójne cudzysłowy.
  2. Kolejność, w jakiej ustawiasz schematy domyślne, ma a, b, cznaczenie, ponieważ jest to również kolejność, w jakiej schematy będą wyszukiwane w tabelach. Więc jeśli masz tę samą nazwę tabeli w więcej niż jednym schemacie spośród domyślnych, nie będzie dwuznaczności, serwer zawsze będzie używał tabeli z pierwszego schematu, który podałeś dla swojego search_path.
Milen A. Radev
źródło
20
Warto również zauważyć, aby wyraźnie NIE używać cudzysłowów wokół wyliczenia a, b, c. Ręka przy czole przez ostatnie 15 minut ...
Jmoney38
4
@ Jmoney38 Nie używać apostrofów, ale cudzysłowy są wymagane w przypadku nieprostych nazw schematów.
vitaly-t
Tak, to są identyfikatory , a nie ciągi.
Ludovic Kuty
139

Możesz ustawić wartość domyślną search_pathna poziomie bazy danych:

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

Lub na poziomie użytkownika lub roli:

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

Lub jeśli masz wspólny domyślny schemat we wszystkich bazach danych, możesz ustawić systemowy domyślny schemat w pliku konfiguracyjnym za pomocą opcji search_path .

Po utworzeniu bazy danych jest ona domyślnie tworzona z ukrytej bazy danych „szablonu” o nazwie template1. Można zmienić tę bazę danych, aby określić nową domyślną ścieżkę wyszukiwania dla wszystkich baz danych utworzonych w przyszłości. Możesz także utworzyć inną bazę danych szablonu i użyć jej CREATE DATABASE <database_name> TEMPLATE <template_name>do tworzenia baz danych.

joshperry
źródło
9
dla tych, którzy zastanawiają się z wiersza poleceń psql, możesz wyświetlić schematy według \ dn
BKSpurgeon
3
Aby ustawienia zaczęły obowiązywać, należy rozłączyć sesję i połączyć się ponownie.
isapir
och, błogosławię cię. przyszedł do PG z SQL Server, więc to wszystko jest dla mnie nowe (i dziwne)
Nate Anderson
25

Josh ma rację, ale pominął jedną odmianę:

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

Ustaw ścieżkę wyszukiwania dla użytkownika w jednej konkretnej bazie danych.

Chris Johnson
źródło
bardzo przydatne też. Dzięki
Alejandro Teixeira Muñoz