Widzę bieżący search_path
z:
show search_path ;
I mogę ustawić search_path
dla bieżącej sesji za pomocą:
set search_path = "$user", public, postgis;
Ponadto mogę na stałe ustawić search_path
dla danej bazy danych za pomocą:
alter database mydb set search_path = "$user", public, postgis ;
I mogę na stałe ustawić search_path
dla danej roli (użytkownika) za pomocą:
alter role johnny set search_path = "$user", public, postgis ;
Chciałbym jednak wiedzieć, jak określić (w odniesieniu do ) ustawienia bazy danych i rolisearch_path
przed ich zmianą?
źródło
alter role myrole set search_path = "$user", public, postgis ;
zauważyłem, żepg_roles.rolconfig
(odpowiadając mojej roli) uzyskałem wartość{"search_path=\"$user\", public, postgis"}
. Ponadtoselect * from pg_db_role_setting ;
pokazuje teraz dodatkowy wiersz. Po wykonaniualter database mydb set search_path = "$user", public, postgis ;
widzę odpowiedni wierszselect * from pg_db_role_setting ;
- na końcu nie jestem pewien, jak „cofnąć” te zmiany.Stałe ustawienia zarówno baz danych, jak i ról są przechowywane w tabeli dla całego klastra systemu pg_db_role_settings .
Obecne są tylko zmienione ustawienia. Jeśli ścieżka wyszukiwania nigdy nie była modyfikowana dla bazy danych lub roli, to chyba można to założyć
"$user",public
.Wartość ustawienia przed każdą zmianą, w tym na poziomie klastra (poprzez konfigurację globalną
postgresql.conf
), można uzyskać w bazie danych za pomocą:Wartość ustawienia przed każdą zmianą w sesji (za pomocą
SET
polecenia) można uzyskać z bazy danych za pomocą:Gdy zostanie ustawiona wartość inna niż domyślna
postgresql.conf
, uzyskanie tej wartości w SQL niezależnie od bieżącej sesji nie jest proste .pg_settings.boot_val
nie zrobi tego, ponieważ ignoruje zmiany w pliku konfiguracyjnym, i teżpg_settings.reset_val
tego nie zrobi, ponieważ wpływają na to ustawienia bazy danych / użytkownika, które mogą zostać wprowadzoneALTER USER/ALTER DATABASE
. Najprostszym sposobem uzyskania wartości przez DBA jest po prostu jej sprawdzeniepostgresql.conf
. W przeciwnym razie zobacz Resetowanie ścieżki wyszukiwania do globalnej wartości domyślnej klastra, która szczegółowo omawia ten temat.źródło
boot_val
naprawdę nie jest to wkompilowane ustawienie fabryczne, a nie ustawieniepostgresql.conf
?reset_val
Zamiast tego można by spojrzećboot_val
.reset_val
. Natknąłem się na to stare pytanie, badając ostatnie: dba.stackexchange.com/questions/145280/…Prawda dla postgres i Redshift. To wydaje się zbyt proste w porównaniu z poprzednimi odpowiedziami, które zależą
pg_db_role_setting
, aleuseconfig
kolumna będzie miała listę konfiguracji użytkownika, w tymsearch_path
sformatowanych jako lista.pg_user Dokumentacja Postgres jest tutaj
Aby być bardziej selektywnym:
Myślę, że ta tabela użytkowników zawiera wszystkich użytkowników w klastrze, a nie tylko określoną bazę danych - ale tego nie zweryfikowałem.
źródło