Am 3. Oktober 2019 wurde eine neue Version der weltweit fortschrittlichsten Open-Source-Datenbank veröffentlicht. PostgreSQL 12 ist jetzt neben anderen wichtigen Funktionen mit bemerkenswerten Verbesserungen der Abfrageleistung (insbesondere bei größeren Datensätzen und der gesamten Speicherplatznutzung) verfügbar.
In diesem Blog werfen wir einen Blick auf diese neuen Funktionen und zeigen Ihnen, wie Sie diese neue Version von PostgreSQL 12 erhalten und installieren. Wir werden auch einige Überlegungen untersuchen, die beim Upgrade zu berücksichtigen sind.
Funktionen und Verbesserungen von PostgreSQL 12
Beginnen wir damit, einige der wichtigsten Funktionen und Verbesserungen dieser neuen PostgreSQL-Version zu erwähnen.
Indizierung
- Es gibt eine Optimierung der Speicherplatznutzung und der Lese-/Schreibleistung für B-Tree-Indizes.
- Reduzierung des WAL-Overheads für die Erstellung von GiST-, GIN- und SP-GiST-Indizes.
- Sie können K-nächste-Nachbar-Abfragen mit dem Abstandsoperator (<->) unter Verwendung von SP-GiST-Indizes durchführen.
- Erstellen Sie Indizes neu, ohne Schreibvorgänge in einen Index über den Befehl REINDEX CONCURRENTLY zu blockieren, sodass Benutzer Ausfallzeiten durch langwierige Indexneuerstellungen vermeiden können.
Partitionierung
- Es gibt Verbesserungen gegenüber Abfragen für partitionierte Tabellen, insbesondere für Tabellen mit Tausenden von Partitionen, die nur Daten aus einer begrenzten Teilmenge abrufen müssen.
- Leistungsverbesserungen beim Hinzufügen von Daten zu partitionierten Tabellen mit INSERT und COPY.
- Sie können eine neue Partition an eine Tabelle anhängen, ohne Abfragen zu blockieren.
SQL
- Sie können jetzt Abfragen über JSON-Dokumente mit JSON-Pfadausdrücken ausführen, die im SQL/JSON-Standard definiert sind, und sie können die vorhandenen Indexierungsmechanismen für im JSONB-Format gespeicherte Dokumente nutzen, um Daten effizient abzurufen.
- WITH-Abfragen können jetzt von PostgreSQL 12 automatisch inliniert werden (wenn sie nicht rekursiv sind, keine Seiteneffekte haben und nur einmal in einem späteren Teil einer Abfrage referenziert werden), was wiederum zur Leistungssteigerung beitragen kann von vielen bestehenden Abfragen.
- Führt "generierte Spalten" ein. Dieser Spaltentyp berechnet seinen Wert aus dem Inhalt anderer Spalten in derselben Tabelle. Das Speichern dieses berechneten Werts auf diesem wird ebenfalls unterstützt.
Internationalisierung
- PostgreSQL 12 erweitert seine Unterstützung von ICU-Kollatierungen, indem es Benutzern ermöglicht, "nicht deterministische Kollatierungen" zu definieren, die beispielsweise Vergleiche ohne Berücksichtigung von Groß- und Kleinschreibung oder Akzenten ermöglichen können.
Authentifizierung
- Führt sowohl client- als auch serverseitige Verschlüsselung für die Authentifizierung über GSSAPI-Schnittstellen ein.
- Der PostgreSQL-Dienst kann LDAP-Server erkennen, wenn er mit OpenLDAP kompiliert ist.
- Mehrstufige Authentifizierung mit der Option clientcert=verify-full und einer zusätzlichen Authentifizierungsmethode, die in der Datei pg_hba.conf konfiguriert ist.
Wenn Sie diese neuen Funktionen und Verbesserungen nutzen möchten, können Sie auf die Download-Seite gehen und die neueste PostgreSQL-Version herunterladen. Wenn Sie ein HA-Setup benötigen, finden Sie hier einen Blog, der Ihnen zeigt, wie Sie PostgreSQL für HA installieren und konfigurieren.
So installieren Sie PostgreSQL 12
Für dieses Beispiel verwenden wir CentOS7 als Betriebssystem. Also müssen wir auf die RedHat-basierte OS-Downloadseite gehen und die entsprechende Version installieren.
$ yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Es wird das PostgreSQL-Repository mit stabilen, Test- und Quellpaketen installieren.
$ head /etc/yum.repos.d/pgdg-redhat-all.repo
# PGDG Red Hat Enterprise Linux / CentOS stable repositories:
[pgdg12]
name=PostgreSQL 12 for RHEL/CentOS $releasever - $basearch
baseurl=https://download.postgresql.org/pub/repos/yum/12/redhat/rhel-$releasever-$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
...
Installieren Sie dann die Client- und Server-PostgreSQL12-Pakete. Es werden einige Python-Abhängigkeiten installiert.
$ yum install postgresql12 postgresql12-server
Jetzt können Sie Ihre neue PostgreSQL 12-Datenbank initialisieren.
$ /usr/pgsql-12/bin/postgresql-12-setup initdb
Initializing database ... OK
Und aktivieren/starten Sie den PostgreSQL-Dienst.
$ systemctl enable postgresql-12
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-12.service to /usr/lib/systemd/system/postgresql-12.service.
$ systemctl start postgresql-12
Und das war's. Sie haben die neue PostgreSQL-Version installiert und ausgeführt.
$ psql
psql (12.0)
Type "help" for help.
postgres=# select version();
version
---------------------------------------------------------------------------------------------------------
PostgreSQL 12.0 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
(1 row)
Nachdem Sie die letzte PostgreSQL-Version installiert haben, können Sie Ihre Daten in diesen neuen Datenbankknoten migrieren.
Upgrade auf PostgreSQL 12
Wenn Sie Ihre aktuelle PostgreSQL-Version auf diese neue aktualisieren möchten, haben Sie drei Hauptoptionen, die diese Aufgabe ausführen.
- pg_dump :Es ist ein logisches Backup-Tool, mit dem Sie Ihre Daten sichern und in der neuen PostgreSQL-Version wiederherstellen können. Hier haben Sie eine Ausfallzeit, die je nach Datengröße variiert. Sie müssen das System stoppen oder neue Daten im Masterknoten vermeiden, pg_dump ausführen, den generierten Dump auf den neuen Datenbankknoten verschieben und wiederherstellen. Während dieser Zeit können Sie nicht in Ihre Master-PostgreSQL-Datenbank schreiben, um Dateninkonsistenzen zu vermeiden.
- Pg_upgrade :Es ist ein PostgreSQL-Tool zum direkten Upgrade Ihrer PostgreSQL-Version. Es könnte in einer Produktionsumgebung gefährlich sein und wir empfehlen diese Methode in diesem Fall nicht. Mit dieser Methode werden Sie auch Ausfallzeiten haben, aber wahrscheinlich deutlich weniger als mit der vorherigen pg_dump-Methode.
- Logische Replikation :Seit PostgreSQL 10 können Sie diese Replikationsmethode verwenden, mit der Sie größere Versions-Upgrades ohne (oder fast ohne) Ausfallzeiten durchführen können. Auf diese Weise können Sie in der letzten PostgreSQL-Version einen Standby-Knoten hinzufügen, und wenn die Replikation auf dem neuesten Stand ist, können Sie einen Failover-Prozess durchführen, um den neuen PostgreSQL-Knoten hochzustufen.
Überlegungen vor dem Upgrade auf PostgreSQL 12
Im Allgemeinen müssen bei allen Upgrade-Prozessen und bei allen Technologien mehrere Punkte berücksichtigt werden. Sehen wir uns einige der wichtigsten an.
- Datentypen abstime, reltime und tinterval wurden entfernt.
- Die recovery.conf-Einstellungen befinden sich in der postgresql.conf-Datei und werden nicht mehr verwendet. Wenn Sie diese Datei erstellt haben, wird der Server nicht gestartet. Die Dateien recovery.signal und standby.signal werden nun verwendet, um in den nicht primären Modus zu wechseln. Die Einstellung trigger_file wurde in promote_trigger_file umbenannt und die Einstellung standby_mode wurde entfernt.
- Mehrere widersprüchliche recovery_target-Spezifikationen sind nicht zulässig.
- Die Angabe von „-f“ zum Senden des Dump-Inhalts an die Standardausgabe ist in pg_restore erforderlich.
- Die maximale Indexeintragslänge wird in den B-Tree-Indizes um acht Bytes reduziert, um die Behandlung von doppelten Einträgen zu verbessern. Der REINDEX-Vorgang für einen Index, der von einer früheren Version pg_upgrade wurde, konnte fehlschlagen.
- DROP IF EXISTS FUNCTION/PROCEDURE/AGGREGATE/ROUTINE erzeugt einen Fehler, wenn keine Argumentliste angegeben wird und es mehrere übereinstimmende Objekte gibt.
Ausführlichere Informationen zu den neuen Funktionen von PostgreSQL 12 und Überlegungen vor der Migration finden Sie auf der Webseite mit den offiziellen Versionshinweisen.