Ich kann die Strömung sehen search_path
mit:
show search_path ;
Und ich kann das search_path
für die aktuelle Session einstellen mit:
set search_path = "$user", public, postgis;
Ebenso kann ich die search_path
für eine gegebene Datenbank dauerhaft einstellen mit:
alter database mydb set search_path = "$user", public, postgis ;
Und ich kann die search_path
für eine bestimmte Rolle (Benutzer) dauerhaft einstellen mit:
alter role johnny set search_path = "$user", public, postgis ;
Aber ich würde gerne wissen , wie Sie feststellen können, was die Datenbank und Rolle Einstellungen sind (bezüglich search_path
) vor , sie zu verändern?
quelle
alter role myrole set search_path = "$user", public, postgis ;
ich gemerkt, dasspg_roles.rolconfig
(entsprechend meiner Rolle) der Wert erhalten hat{"search_path=\"$user\", public, postgis"}
. Außerdem wirdselect * from pg_db_role_setting ;
jetzt eine zusätzliche Zeile angezeigt. Und nach dem Ausführenalter database mydb set search_path = "$user", public, postgis ;
sehe ich eine entsprechende Zeile inselect * from pg_db_role_setting ;
- am Ende bin ich mir nicht sicher, wie ich diese Änderungen "rückgängig machen" soll.Die permanenten Einstellungen für Datenbanken und Rollen werden in der clusterweiten Systemtabelle pg_db_role_settings gespeichert .
Es sind nur geänderte Einstellungen vorhanden. Wenn der Suchpfad für eine Datenbank oder eine Rolle nie geändert wurde, kann dies vermutlich angenommen werden
"$user",public
.Der Wert der Einstellung vor jeder Änderung, auch auf Clusterebene (über die globale Konfiguration
postgresql.conf
), kann aus der Datenbank abgefragt werden mit:Der Wert der Einstellung vor jeder Änderung innerhalb der Sitzung (über den
SET
Befehl) kann aus der Datenbank abgefragt werden mit:Wenn ein nicht standardmäßiger Wert in festgelegt ist
postgresql.conf
, ist es nicht einfach, diesen Wert in SQL unabhängig von der aktuellen Sitzung abzurufen .pg_settings.boot_val
Dies ist nicht der Fall, da Änderungen in der Konfigurationsdatei ignoriert werden undpg_settings.reset_val
auch nicht, da sie von den möglicherweise durch festgelegten Datenbank- / Benutzereinstellungen beeinflusst werdenALTER USER/ALTER DATABASE
. Der einfachste Weg für einen DBA, den Wert zu ermitteln, besteht darin, ihn nur nachzuschlagenpostgresql.conf
. Andernfalls lesen Sie Zurücksetzen von search_path auf den globalen Clusterstandard, in dem dieses Thema ausführlich behandelt wird.quelle
boot_val
eigentlich die kompilierte Werkseinstellung, nicht die Einstellung inpostgresql.conf
?reset_val
stattdessen anschauen wollenboot_val
.reset_val
. Ich bin über diese alte Frage gestolpert, als ich diese letzte recherchierte: dba.stackexchange.com/questions/145280/…Richtig für Postgres und Redshift. Dies scheint im Vergleich zu den vorherigen abhängigen Antworten zu einfach
pg_db_role_setting
, aber dieuseconfig
Spalte enthält eine Liste der Benutzerkonfigurationen, einschließlich dersearch_path
als Liste formatierten.Die Dokumentation zu pg_user Postgres finden Sie hier
Um selektiver zu sein:
Ich denke, diese Benutzertabelle enthält alle Benutzer im Cluster, nicht nur eine bestimmte Datenbank - aber ich habe das nicht überprüft.
quelle