Daniel Westermann erklärt im DBI Blog die Rolle der Template-Datenbanken in postgres, über die ich mir bisher nicht allzu viele Gedanken gemacht habe. Im Artikel erläutert er folgende Punkte:
- in einem neu installierten postgres-Cluster existieren zunächst drei Datenbanken: postgres, template0 und template1.
- die Datenbank postgres ist der default-Einstiegspunkt für viele Applikationen (etwa den pgadmin), kann aber - wie jede andere Datenbank - gelöscht werden, wenn keine Connections zur Datenbank existieren.
- man kann sich anschließend aber problemlos mit der Datenbank template1 verbinden und in dieser über das Kommando "create database postgres;" die Standarddatenbank neu erzeugen.
- Eine Datenbank, die über "create database" erzeugt wird, stellt eine exakte Kopie der Datenbank template1 dar. Werden in template1 neue Objekte erzeugt, so sind sie somit auch in den danach aus dem Template erzeugten DBs vorhanden.
- es ist möglich, an Stelle von template1 eine andere Template-Datenbank zu verwenden. Dazu dient die Syntax "create database ... template ....;"
- template0 erlaubt keine Connections (datallowconn=f in pg_database) und dient als unveränderliches Basis-Template.
- Änderungen an den Attributen in pg_database erfolgen als Update: damit kann man beispielsweise das Attribut datistemplate anpassen, um eine Datenbank zum Template zu machen (wodurch sie übrigens unlöschbar wird). Ich finde es zwar immer wieder unheimlich, wenn an Dictionary-Tabellen Anpassungen durch DML ausgeführt werden, aber in postgres ist das offenbar so vorgesehen.
Erstaunlich ist für mich dabei vor allem, wie wenig ich bisher über die Rolle der Template-Datenbanken nachgedacht habe...
Keine Kommentare:
Kommentar veröffentlichen