Über unsMediaKontaktImpressum
Ernst Leber 31. Januar 2017

PostgreSQL als Datenbank-System

Es ist im Leben nie zu spät zum Lernen. Toller Slogan, aber da ist doch was dran, oder? Bei Gesprächen mit Kunden und auf Vortragsreisen kam es immer wieder auf das Thema "Postgres als Datenbank-System". Nun gut, wenn so viel darüber geredet wird, muss ich mich damit beschäftigen, habe ich mir gesagt...

Also war der Entschluss gefasst, nach mehr als 25 Jahren Erfahrung mit Oracle-Datenbanken einen Blick über den Zaun auf Postgres zu werfen. Es ist nicht bei dem Blick über den Zaun geblieben: Ich werde in Zukunft in jedem Fall auch Postgres als Datenbank-System und die Open Source-Welt für meine täglichen Aufgaben in Betracht ziehen.

Der Einstieg

Auf der Suche nach einem Einstieg in diese neue Datenbankwelt habe ich zunächst im Internet gesucht. Mit der Frage "Was ist Postgres?" landete ich bei Wikipedia: "PostgreSQL … ist ein freies, objektrelationales Datenbankmanagementsystem (ORDBMS). Seine Entwicklung begann in den 1980er Jahren, seit 1997 wird die Software von einer Open-Source-Community weiterentwickelt." [1]

Danach kam ich zum Postgres-Wiki. Hier gibt es ein Fülle von Information mit Artikeln, Tutorials und natürlich der Dokumentation [2]. Nach kurzem Einlesen stand fest: Die Einarbeitung geht am Besten durch "Learning by Doing!"

Installation

Die Standard-Installation schien mir der schnellste Einstieg zu sein. Während der Vorbereitungen für die Installation wurde mir schnell klar, dass ich ohne einen Einstieg in die Open Source-Welt keinen richtigen Zugang zu Postgres finden würde. Für eine Standard-Installation sollte es aber reichen. Als Betriebssystem habe ich Centos 7 ausgewählt und während der Installation die Option "Datenbank Server" genutzt. Damit war Postgres schon an Bord.

Was in Oracle ein Buch ist, ist in Postgres ein Kapitel und es ist alles drin.

Nach der Installation war mein erster Eindruck: "Das System ist aber recht klein und da soll eine komplette Datenbank-Installation mit dabei sein?" Von Oracle gewöhnt, dass eine typische Datenbank-Installation mindestens 5 GB Plattenplatz zusätzlich zum Betriebssystem benötigt, war ich hier erstaunt, dass die komplette Installation nur 4,2 GB inklusive Betriebssystem hatte. Schön, Postgres ist also im Vergleich zu Oracle sehr schlank, aber ist denn auch alles drin?

Die Dokumentation von Postgres 9.6 hat als PDF 3.241 Seiten, die von Oracle umfasst ganze Bücher. Es mag komisch klingen, aber was in Oracle ein Buch ist, z. B. Administration, ist in Postgres ein Kapitel und es ist wirklich alles drin.

Erste Schritte

Ich habe zunächst eine kleine Spieldatenbank aufgebaut, um dann zu sehen, wie sich die Themen meiner täglichen Arbeit in Postgres wiederfinden.

Die Anzahl der Prozesse ist bei Postgres überschaubar. Das folgende Listing zeigt alle Prozesse einer laufenden Datenbank:

Listing 1: Prozessübersicht Postgres

[root@centserv ~]# systemctl status postgresql-9.6
 …
   CGroup: /system.slice/postgresql-9.6.service
           ??1406 /usr/pgsql-9.6/bin/postmaster -D /var/lib/pgsql/9.6/data/
           ??1442 postgres: logger process
           ??1453 postgres: checkpointer process
           ??1454 postgres: writer process
           ??1455 postgres: wal writer process
           ??1456 postgres: autovacuum launcher process
           ??1457 postgres: archiver process last was 000003000000000000027
           ??1458 postgres: stats collector process
…
[root@centserv ~]#

Bei Oracle-Systemen sollte man schon 40 - 80 Prozesse einkalkulieren, gegen 8 oder 10 Prozesse ist das schon ein Unterschied.

Der User sys oder system ist in Postgres der User postgres. Als sqlplus-Pendant gibt es psql. Mit diesem Tool wird die Datenbank administriert. Das Erstellen einer Datenbank erfolgt in Postgres entweder mit dem Befehl createdb vom Betriebssystem aus oder mit create database <dbname> aus psql heraus. Interessant fand ich, dass beim Erstellen einer Datenbank ein Template genutzt wird. Das hat mich an die neue Multitenant-Architektur von Oracle 12 mit der pdb$seed erinnert. Was ist jetzt fortschrittlicher, Postgres oder Oracle?

Natürlich ist die Einarbeitung in Postgres nicht reibungslos gelaufen, aber auf meine Fehler habe ich im Internet in den einschlägigen Foren immer eine Antwort gefunden. Damit ging die Einarbeitung recht zügig voran und ich habe keine Funktion oder Feature aus der Oracle-Datenbank gefunden, das nicht auch in Postgres vorhanden ist oder sich dort nachbilden ließe.

Zunächst eine Begriffsbestimmung: Wenn in Postgres der Begriff "Datenbankcluster" genutzt wird, meint das die Datenbank selbst, mit allen darin enthaltenen Datenbanken. Unter Oracle versteht man unter einem "Cluster", dass eine einzelne Datenbank aus mehreren Servern und darauf laufenden Instanzen besteht, wobei eine der Instanzen durchaus ausfallen kann, ohne die Datenbank zu stoppen.

Nun gut, eine Datenhaltung – basierend auf Tabellen mit den zugehörigen Konstrukten, bestehend aus Indexen, Views und ähnlichem – muss ein modernes Datenbanksystem können. Was aber ist mit Funktionen für Datensicherung, Verschlüsselung und Standby oder Verfügbarkeit?

Datensicherung

Als Oracle-User denkt man da an Data Pump und RMAN. Das Pendant zu Data Pump gibt es gleich doppelt als pg_dump und pg_dumpall. Beide Tools erstellen einen in sich konsistenten Dump der Datenbank. Um es kurz zu machen, pg_dump ist mit Data Pump vergleichbar, wenn hier ein Dump eines Schemas als dessen Owner erzeugt wird. In pg_dump sind zwar die Daten und Strukturen enthalten, aber keine Create-Skripte für den User selbst.

pg_dumpall erstellt einen Dump des kompletten Datenbankclusters, der alle für die Erstellung der Datenbanken erforderlichen Daten enthält. Die Tools pg_dump und pg_dumpall sind das Mittel der Wahl, wenn zwischen Postgres-Versionen oder unterschiedlicher Hardware migriert werden soll. Der Import einer einzelnen Tabelle ist ebenfalls möglich, dafür ist dann pg_restore zuständig, mit dem die gewünschte Tabelle aus dem Dump ausgelesen und anschließend in die Datenbank eingespielt wird.

Für ein Online-Backup, wie man das von RMAN bei Oracle kennt, gibt es pg_basebackup. Hierfür muss, wie in Oracle, die Archivierung aktiviert sein. pg_basebackup erstellt dann ein Backup der kompletten Datenbank mit allen erforderlichen Dateien. In diesem Backup sind im Gegensatz zu Oracle alle Dateien – also auch die Konfigurationsdateien – enthalten. Zusätzlich zu diesem Base-Backup müssen die Archive-Dateien ebenfalls archiviert werden. Ein solches Backup oder ein Dump kann natürlich sehr groß werden. Es gibt jedoch die Möglichkeit, den Output zu komprimieren und z. B. mit split in handlichere Einzeldateien zu splitten.

Eine Point-in-time-Recovery ist ebenfalls möglich, allerdings wird der Zeitpunkt des Recovery nicht im Recovery-Befehl angegeben, sondern in einer Recovery-Datei eingetragen.

Sicherheit und Verschlüsselung

Noch ein Nachsatz zur Installation: Bei der Installation einer Oracle-Datenbank habe ich bisher immer gemäß Recommendation die Firewall ausgeschaltet und SELinux entweder disabled oder auf permissive gestellt. Unter Postges ist das nicht erforderlich und SELinux kann in Postgres integriert werden.

Eine Verschlüsselung der Daten ist bei beiden Systemen sowohl in der Datenbank als auch auf der Kommunikationsschiene möglich. Zusätzlich kann Postgres mit verschlüsselten Dateisystemen umgehen.

Mit Rules bietet Postgres eine Lösung für das von Oracle bekannte Virtual Private Database (VPD). Dadurch kann sichergestellt werden, dass ein Sachbearbeiter nur die Daten sieht, die er für seine Arbeit benötigt.

Standby-Datenbank

In Postgres gibt es die Möglichkeit, eine Standby-Datenbank mit Bordmitteln zu erstellen. Hierfür wird der Archive-Log-Modus zwingend vorausgesetzt. Das Stichwort ist hier write ahead log (WAL). In diesen Log-Files werden alle Änderungen in der Datenbank protokolliert. Diese Log-Files werden an die Standby-Datenbank übertragen und dort in einem kontinuierlichen Recovery-Prozess in die Standby-Datenbank eingetragen.

Für beide Systeme gilt, dass kontinuierliches Lernen unumgänglich ist.

Eine automatische Umschaltung zwischen Primary- und Standby-Datenbank wie von Oracle mit dem Observer bekannt, ist nicht vorgesehen, kann aber durch geeignete Open Source-Pakete realisiert werden.

Fazit

Mein persönliches Fazit aus der Einarbeitung in Postgres ist etwas zwiespältig. Zum einen gibt es die Oracle-Welt, in der für alle Erfordernisse des Datenbankbetriebs eine Lösung vorhanden ist, die allerdings größtenteils mit Lizenzkosten verbunden sind. Allerdings hat man den Vorteil, dass alle Lösungen aus einer Hand kommen und es damit kein Fingerpointing bei Problemen geben sollte.

Postgres beschränkt sich auf die Kernaufgabe. Es wird ein Datenhaltungssystem zur Verfügung gestellt, dass allen Anforderungen gerecht wird und sehr schlank ist. Postgres ist erweiterbar und fehlende Optionen wie Hochverfügbarkeit können durch den Einsatz von Open Source-Tools installiert werden – und alles ohne Lizenzkosten.

Für beide Systeme gilt, dass kontinuierliches Lernen unumgänglich ist. Allerdings sehe ich hier das Open Source-Modell als das offenere System an und die Kenntnisse und Grundlagen aus der Open Source-Welt können in der Oracle-Welt bestens angewendet werden.

Quellen
  1. Wikipedia: PostgreSQL
  2. PostgreSQL-Wiki

Autor

Ernst Leber

Ernst Leber ist seit 1985 in der IT tätig. Er ist als DBA bei der MT AG in Ratingen im Bereich Managed Services zuständig für Engineered Systems (ODA, EXADATA, PCA, …).
>> Weiterlesen
Das könnte Sie auch interessieren
Kommentare (0)

Neuen Kommentar schreiben