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?
sql
postgresql
Nakh
źródło
źródło
Odpowiedzi:
(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ć:
a, b, c
znaczenie, 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 swojegosearch_path
.źródło
Możesz ustawić wartość domyślną
search_path
na 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.źródło
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.
źródło