Release der Datenbank PostgreSQL 14

Nach einem Jahr Entwicklung wurde der neue stabile Zweig der Datenbank PostgreSQL 14 veröffentlicht. Aktualisierungen für den neuen Zweig werden über einen Zeitraum von fünf Jahren bis November 2026 erscheinen.

Hauptneuheiten:

  • Unterstützung für den Zugriff auf JSON-Daten wurde durch Ausdrücke hinzugefügt, 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, die vom Typ hstore bereitgestellt werden, implementiert. Eine solche Syntax wurde ursprünglich unter Verwendung eines universellen Frameworks realisiert, das in Zukunft auch für andere Typen genutzt werden kann. Beispiel für den hstore-Typ: INSERT INTO mytable VALUES (‘a=>b, c=>d’); SELECT h[‘a’] FROM mytable; UPDATE mytable SET h[‘c’] = ‘new’;

  • Die Typenfamilie zur Definition von Bereichen wurde um die neuen Typen „multirange“ erweitert, die geordnete Listen von nicht überlappenden Wertebereichen definieren. Neben jedem bestehenden Range-Typ wurde sein Multirange-Typ angeboten, zum Beispiel entspricht dem Typ „int4range“ der Typ „int4multirange“, und dem „daterange“ entspricht „datemultirange“. Die Verwendung neuer Typen vereinfacht die Erstellung von Abfragen, die mit komplexen Sequenzen von Bereichen umgehen. 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 stark ausgelasteten Systemen, die eine große Anzahl von Verbindungen verarbeiten, zu steigern. In einigen Tests wurde eine Verdopplung der Leistung beobachtet.
  • Die Effizienz der B-Baum-Indizes wurde verbessert und ein Problem mit dem Wachstum der Indizes bei häufiger Tabellenaktualisierung behoben.
  • Unterstützung für den Client-seitigen Betrieb (implementiert auf libpq-Ebene) des Pipeline-Modus wurde hinzugefügt, der die Ausführung von vielen kleinen Schreiboperationen (INSERT/UPDATE/DELETE) erheblich beschleunigt, 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 Paketlaufzeiten zu beschleunigen.
  • Die Möglichkeiten für verteilte Konfigurationen, die mehrere Server PostgreSQL. In der Implementierung der logischen Replikation wurde die Möglichkeit eingeführt, Transaktionen, die sich in einem Bearbeitungsprozess befinden, im Streaming-Modus zu versenden, was die Leistung der Replikation großer Transaktionen erheblich verbessert. Darüber hinaus wurde die logische Dekodierung der Daten optimiert, die während der logischen Replikation eingehen.
  • Im Mechanismus zum Anschluss externer Tabellen Foreign Data Wrapper (postgres_fdw) wurde die Unterstützung für die parallele Verarbeitung von Anfragen hinzugefügt, die derzeit nur bei der Verbindung mit anderen PostgreSQL-Servern anwendbar ist. In postgres_fdw wurde auch die Unterstützung für das Hinzufügen von Daten zu externen Tabellen im Batch-Modus sowie die Möglichkeit zur Importierung von partitionierten Tabellen durch Angabe der Direktive „IMPORT FOREIGN SCHEMA“ ergänzt.
  • Optimierungen wurden bei der Implementierung der VACUUM-Operation (Müllsammlung und Komprimierung des Speicherplatzes) vorgenommen. Es wurde ein Notfallmodus zur Bereinigung hinzugefügt, der unwesentliche Reinigungsoperationen überspringt, wenn Bedingungen für die Rückkehr zu einer zweiten Runde der Transaktionsidentifikatoren (transaction ID wraparound) geschaffen werden. Die Kosten für die Verarbeitung von B-Baum-Indizes wurden gesenkt. Die Ausführung der ANALYZE-Operation zur Sammlung von Statistiken über die Datenbank wurde erheblich beschleunigt.
  • Die Möglichkeit zur Konfiguration der Komprimierungsmethode, die im TOAST-System verwendet wird, das für die Speicherung großer Daten wie Textblöcken oder geometrischen Informationen verantwortlich ist, wurde hinzugefügt. Neben der Komprimierungsmethode pglz kann jetzt auch der Algorithmus LZ4 in TOAST verwendet werden.
  • Die Werkzeuge zur Überwachung der Datenbank-Management-Systeme wurden erweitert. Es wurden Sichten hinzugefügt, um den Fortschritt der „COPY“-Befehle (pg_stat_progress_copy), Statistiken zu Replikations-Slots (pg_stat_replication_slots) und Aktivitäten im Zusammenhang mit dem WAL-Transaktionsprotokoll (pg_stat_wal) zu verfolgen. Eine Funktion compute_query_id wurde hinzugefügt, die in verschiedenen Subsystemen wie pg_stat_activity und EXPLAIN VERBOSE die Verfolgung von Anfragen mit der Zuweisung einer einzigartigen Identifikation für jede Anfrage ermöglicht.
  • Im Abfrageplaner wurden Optimierungen hinzugefügt, die die parallele Verarbeitung von Abfragen verbessern und die Leistung bei der gleichzeitigen Ausführung von Operationen zur sequentiellen Scannung von Datensätzen, dem parallelen Starten von Abfragen in PL/pgSQL mit dem Befehl „RETURN QUERY“ und der parallelen Ausführung von Abfragen in „REFRESH MATERIALIZED VIEW“ steigern. Zur Verbesserung der Leistung von zyklischen eingebetteten Joins wurde eine Unterstützung für zusätzliches Caching implementiert.
  • Für die Optimierung von Ausdrücken kann nun erweiterte Statistik verwendet werden, und für die Optimierung von Fensterfunktionen wird inkrementelles Sortieren unterstützt.
  • In gespeicherten Prozeduren, die die Verwaltung von Transaktionen in Codeblöcken ermöglichen, wurde die Unterstützung zur Definition von Rückgabewerten über die Parameter „OUT“ implementiert.
  • Die Funktion date_bin wurde hinzugefügt, um Werte vom Typ timestamp entsprechend 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 das Ordnen und Erkennen von Zyklen in rekursiven gemeinsamen Tabellenausdrücken (Common Table Expression, CTE) 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 der psql-Dienstprogramm wurde die Autovervollständigung von Befehlen mit Tabulator verbessert, im Befehl „\df“ wurde die Möglichkeit hinzugefügt, die Argumente von Funktionen anzuzeigen, und im Befehl „\dX“ wurde die ausgegebene Statistik erweitert.
  • Es wurde die Möglichkeit geschaffen, Benutzern Berechtigungen zuzuweisen, die nur Lese- oder nur Schreibzugriff erlauben. Berechtigungen können in Verbindung mit bestimmten Tabellen, Sichten und Schemas über die 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 die Passwortauthentifizierung mit der Methode SCRAM-SHA-256 anstelle von md5 angewendet (der Parameter „password_encryption“ in der Generierung von postgresql.conf wird nun auf den Wert ‘scram-sha-256’ festgelegt).

Quelle: opennet.ru

60GB SSD 8Gb DDR4