Nach einem Jahr der Entwicklung wurde der neue stabile Branch der PostgreSQL-Datenbankmanagementsoftware 14 veröffentlicht. Updates für diese neue Version werden bis November 2026 über einen Zeitraum von fünf Jahren bereitgestellt.
Hauptneuheiten:
- Unterstützung für den Zugriff auf JSON-Daten wurde hinzugefügt, wobei Ausdrücke verwendet werden, die der Arbeit mit Arrays ähneln: SELECT ('{ "postgres": { "release": 14 }}'::jsonb)['postgres']['release']; SELECT * FROM test WHERE details['attributes']['size'] = '"medium"';
Eine ähnliche Syntax wurde auch für Daten im Schlüssel/Wert-Format, bereitgestellt durch den Typ hstore, implementiert. Diese Syntax wurde ursprünglich mit einem universellen Framework realisiert, das in Zukunft auch für andere Typen genutzt werden kann. Beispiel für den Typ hstore: INSERT INTO mytable VALUES ('a=>b, c=>d'); SELECT h['a'] FROM mytable; UPDATE mytable SET h['c'] = 'new';
- Die Familie der Typen zur Definition von Bereichen wurde um neue Typen «multirange» erweitert, die geordnete Listen nicht überlappender Wertebereiche ermöglichen. Zusätzlich wurde zu jedem bestehenden Range-Typ ein entsprechender Multirange-Typ angeboten, zum Beispiel entspricht «int4range» dem «int4multirange» und «daterange» dem «datemultirange». Die Verwendung neuer Typen vereinfacht die Erstellung von Abfragen, die mit komplexen Sequenzen von Bereichen arbeiten. SELECT ‘{[3,7), [8,9)}’::int4multirange; SELECT nummultirange(numrange(1.0, 14.0), numrange(20.0, 25.0));
- Optimierungen wurden vorgenommen, um die Leistung von hochbelasteten Systemen, die eine große Anzahl von Verbindungen verarbeiten, zu verbessern. In einigen Tests wurde eine Verdopplung der Leistung beobachtet.
- Die Effizienz der B-Baum-Indizes wurde erhöht und das Problem des Wachstums der Indizes bei häufigen Aktualisierungen von Tabellen wurde gelöst.
- Die Unterstützung für den clientseitigen Betrieb (implementiert auf libpq-Ebene) des Pipeline-Abfrageübertragungsmodus wurde hinzugefügt. Dieser ermöglicht eine signifikante Beschleunigung von Szenarien zur Interaktion mit Datenbanken, die mit einer Vielzahl kleiner Schreiboperationen (INSERT/UPDATE/DELETE) verbunden sind, indem die nächste Anfrage gesendet wird, ohne auf das Ergebnis der vorherigen zu warten. Dieser Modus trägt auch dazu bei, die Leistung bei Verbindungen mit hohen Latenzen zu verbessern.
- Die Möglichkeiten für verteilte Konfigurationen, die mehrere Server PostgreSQL-Instanzen umfassen, wurden erweitert. In der Implementierung der logischen Replikation besteht die Möglichkeit, Transaktionen, die sich im Ausführungsprozess befinden, im Stream-Modus zu senden, was die Leistung der Replikation großer Transaktionen erheblich steigert. Darüber hinaus wurde die logische Dekodierung der während der logischen Replikation eingehenden Daten optimiert.
- Im Mechanismus zur Anbindung von externen Tabellen, dem Foreign Data Wrapper (postgres_fdw), wurde die Unterstützung für die parallele Verarbeitung von Anfragen hinzugefügt, die bislang nur beim Anschluss an andere PostgreSQL-Server anwendbar ist. In postgres_fdw wurde zudem die Möglichkeit zur batchweisen Datenübertragung in externe Tabellen und die Option zum Import von partitionierten Tabellen durch die Angabe der Direktive „IMPORT FOREIGN SCHEMA“ ergänzt.
- Optimierungen wurden in die Implementierung des VACUUM-Befehls (Bereinigung und Komprimierung des Datenspeichers) eingeführt. Ein Notfallreinigungsmodus („emergency mode“) wurde hinzugefügt, der unwesentliche Reinigungsoperationen umgeht, wenn Bedingungen für einen transaction ID wraparound geschaffen werden. Die Kosten bei der Verarbeitung von B-Tree-Indizes wurden gesenkt. Außerdem wurde die Ausführung des Befehls „ANALYZE“, der Statistiken über die Datenbank erstellt, erheblich beschleunigt.
- Es wurde die Möglichkeit eingeführt, die Kompressionsmethode zu konfigurieren, die im TOAST-System verwendet wird, das für die Speicherung großer Datenmengen, wie Textblöcke oder geometrische Informationen, verantwortlich ist. Neben der pglz-Kompressionsmethode kann nun auch der LZ4-Algorithmus im TOAST verwendet werden.
- Die Überwachungsfunktionen für die Datenbankverwaltungssysteme wurden erweitert. Es wurden Ansichten zur Verfolgung des Fortschritts von "COPY"-Befehlen (pg_stat_progress_copy), Statistiken zu Replikationsslots (pg_stat_replication_slots) und Aktivitäten im Zusammenhang mit den WAL-Logs von Transaktionen (pg_stat_wal) hinzugefügt. Eine Funktion compute_query_id wurde implementiert, die in verschiedenen Subsystemen wie pg_stat_activity und EXPLAIN VERBOSE das Tracking von Abfragen mit einer für jede Abfrage eindeutigen ID ermöglicht.
- Der Abfrageplaner hat Optimierungen erhalten, die die parallele Verarbeitung von Abfragen verbessern und die Leistung der gleichzeitigen Ausführung von Operationen beim sequenziellen Scannen von Datensätzen sowie bei der parallelen Ausführung von PL/pgSQL-Abfragen mit dem Befehl "RETURN QUERY" und der parallelen Ausführung von Abfragen in "REFRESH MATERIALIZED VIEW" erhöhen. Zur Leistungssteigerung bei zyklischen, verschachtelten Joins wurde eine Unterstützung für zusätzliches Caching realisiert.
- Für die Optimierung von Ausdrücken kann nun erweiterte Statistiken genutzt werden, während für die Optimierung von Fensterfunktionen die inkrementelle Sortierung verwendet werden kann.
- In gespeicherten Prozeduren, die Transaktionen in Codeblöcken verwalten, wurde die Unterstützung zur Definition der zurückgegebenen Daten mittels "OUT"-Parametern implementiert.
- Die Funktion date_bin wurde hinzugefügt, um Werte des Typs timestamp gemäß einem festgelegten Intervall zu runden. SELECT date_bin('15 minutes', TIMESTAMP '2020-02-11 15:44:17', TIMESTAMP '2001-01-01'); 2020-02-11 15:30:00
- Die im SQL-Standard definierten Ausdrücke SEARCH und CYCLE wurden hinzugefügt, um die Sortierung und Erkennung von Zyklen in rekursiven Common Table Expressions (CTEs) zu vereinfachen. WITH RECURSIVE search_tree(id, link, data) AS ( SELECT t.id, t.link, t.data FROM tree t UNION ALL SELECT t.id, t.link, t.data FROM tree t, search_tree st WHERE t.id = st.link ) SEARCH DEPTH FIRST BY id SET ordercol SELECT * FROM search_tree ORDER BY ordercol;
- In dem Tool psql wurde die automatische Vervollständigung von Befehlen mit der Tabulatortaste verbessert, in dem Befehl "\df" wurde die Möglichkeit hinzugefügt, die Argumente der Funktionen anzuzeigen, und in dem Befehl "\dX" wurde die ausgegebene Statistik erweitert.
- Benutzern können Lese- oder Schreibprivilegien zugewiesen werden. Diese Privilegien können spezifisch für einzelne Tabellen, Ansichten und Schemata unter Verwendung der vordefinierten Rollen pg_read_all_data und pg_write_all_data festgelegt werden. GRANT pg_read_all_data TO user1;
- In neuen Installationen wird standardmäßig eine Passwortauthentifizierung über die Methode SCRAM-SHA-256 anstelle von md5 angewendet (die Option „password_encryption“ in der postgresql.conf wird nun auf ‘scram-sha-256’ gesetzt).
Quelle: opennet.ru
