Wofür ist die spezielle Datenbank "postgres"?

18

Ich habe einen PostgreSQL-Server, auf dem mehrere Datenbanken ausgeführt werden. Eine der Datenbanken heißt postgresund war von Anfang an dabei. Ich konnte keine Tabellen darin sehen und habe sie nie explizit verwendet, aber mir ist aufgefallen, dass jeder Benutzer Tabellen in der Datenbank erstellen darf (dies ist nicht das, was ich möchte - ich möchte, dass keine Benutzer außer dem Administrator erstellt werden beliebige Tische überall).

Ich habe das Gefühl, dass es sich um eine spezielle Datenbank handelt, die für einen normalen Serverbetrieb erforderlich ist, aber wozu dient sie genau? Welche Art von Daten werden (oder könnten) darin gespeichert? Enthält es die Metadaten zu anderen Datenbanken (zB dem information_schema?). Kann etwas Schlimmes passieren, wenn ich der connectÖffentlichkeit die Berechtigung für diese Datenbank entzogen habe? Oder wenn ich es überhaupt fallen lasse?

Ich habe eine halbe Stunde gegoogelt, habe aber immer völlig fremdes Zeug bekommen, weil das Wort postgresauch für den Benutzer postgresund das DBMS selbst verwendet wird.

R Kiselev
quelle

Antworten:

31

Daran ist nichts Besonderes. Wie in der PostgreSQL-Dokumentation zum Erstellen einer Datenbank beschrieben , müssen Sie mit einer Datenbank verbunden sein, um eine weitere Datenbank zu erstellen:

Da Sie mit dem Datenbankserver verbunden sein müssen, um den CREATE DATABASEBefehl auszuführen , bleibt die Frage, wie die erste Datenbank an einem bestimmten Standort erstellt werden kann. Die erste Datenbank wird immer durch den initdbBefehl erstellt, wenn der Datenspeicherbereich initialisiert wird. (Siehe Abschnitt 17.2.) Diese Datenbank wird aufgerufen postgres. So erstellen Sie die erste "normale" Datenbank, zu der Sie eine Verbindung herstellen können postgres.

und in Template-Datenbanken :

Hinweis: template1 und template0hat keinen besonderen Status über die Tatsache hinaus , dass der Name template1der Name Standardquelldatenbank ist für CREATE DATABASE. Zum Beispiel könnte man es fallen lassen template1und wieder herstellen, template0ohne irgendwelche negativen Auswirkungen zu haben. Diese Vorgehensweise kann ratsam sein, wenn man achtlos ein paar Junk-Ins hinzugefügt hat template1. (Zum Löschen template1muss es haben pg_database.datistemplate = false.)

Die postgresDatenbank wird auch erstellt, wenn ein Datenbankcluster initialisiert wird. Diese Datenbank ist als Standarddatenbank für Benutzer und Anwendungen gedacht, mit denen eine Verbindung hergestellt werden kann. Es ist lediglich eine Kopie von template1und kann bei Bedarf gelöscht und neu erstellt werden.

ypercubeᵀᴹ
quelle
3
Ja. In der Praxis sollten Sie es in der Regel leer und unverändert lassen, um eine Verbindung herzustellen. Dies ist wirklich eine Warze in PostgreSQL, eine Konsequenz der Tatsache, dass Sie mit PostgreSQL keine Verbindung zu "keiner bestimmten Datenbank" herstellen können, wie dies bei anderen DBMS der Fall ist.
Craig Ringer
1
Vielen Dank, das ist eine gute Antwort! Ich habe den öffentlichen Benutzern den Zugriff verweigert, postgresund alles funktioniert noch, außer eines: pgAdmin III stellt keine Verbindung mehr her, es sei denn, ich habe die Zieldatenbank im Maintenance DBFeld angegeben. Es scheint, dass es früher verwendet wurde, um eine Verbindung zur postgresDatenbank herzustellen.
R Kiselev
@RKiselev Ja, das funktioniert so. Genau wie ypercube geschrieben hat, ist es die Standarddatenbank, zu der eine Verbindung hergestellt werden soll.
Marcin S.
1
Pgadmin hat die Eigenschaft "Wartungsdatenbank". Ändern Sie es einfach in Ihre db, die Sie verbinden möchten
Sahap Asci
@RKiselev: Über pgAdmin und seine "Wartungsdatenbank": Was wird von pgAdmin in der Wartungsdatenbank abgefragt?
Erwin Brandstetter