PostgreSQL 14-Veröffentlichung

Nach einem Jahr Entwicklungszeit wurde ein neuer stabiler Zweig des PostgreSQL 14 DBMS veröffentlicht. Updates für den neuen Zweig werden über einen Zeitraum von fünf Jahren bis November 2026 veröffentlicht.

Wichtigste Neuerungen:

  • Unterstützung für den Zugriff auf JSON-Daten mithilfe arrayähnlicher Ausdrücke hinzugefügt: SELECT ('{ "postgres": { "release": 14 }}'::jsonb)['postgres']['release']; SELECT * FROM test WHERE details['attributes']['size'] = '"medium"';

    Eine ähnliche Syntax ist für die vom hstore-Typ bereitgestellten Schlüssel-/Wertdaten implementiert. Diese Syntax wurde ursprünglich mithilfe eines universellen Frameworks implementiert, das in Zukunft möglicherweise für andere Typen verwendet wird. Beispiel für 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 neue „Multirange“-Typen erweitert, mit denen Sie geordnete Listen nicht überlappender Wertebereiche angeben können. Zusätzlich zu jedem vorhandenen Bereichstyp wird ein eigener Multirange-Typ vorgeschlagen, beispielsweise entspricht der Typ „int4range“ „int4multirange“ und der Typ „daterange“ entspricht „datemultirange“. Die Verwendung neuer Typen vereinfacht den Entwurf von Abfragen, die komplexe Bereichsfolgen bearbeiten. SELECT '{[3,7), [8,9)}'::int4multirange; SELECT nummultirange(numrange(1.0, 14.0), numrange(20.0, 25.0));
  • Es wurden Optimierungen vorgenommen, um die Leistung von Hochlastsystemen, die eine große Anzahl von Verbindungen verarbeiten, zu verbessern. Bei einigen Tests ist eine Leistungssteigerung um das Doppelte zu beobachten.
  • Die Effizienz von B-Tree-Indizes wurde verbessert und das Problem des Indexwachstums bei häufigen Tabellenaktualisierungen wurde behoben.
  • Unterstützung für den clientseitigen (auf libpq-Ebene implementierten) Modus der Pipeline-Übertragung von Anforderungen hinzugefügt, der es Ihnen ermöglicht, Datenbankszenarien, die mit der Durchführung einer großen Anzahl kleiner Schreibvorgänge (INSERT/UPDATE/DELETE) verbunden sind, durch das Senden erheblich zu beschleunigen nächste Anfrage, ohne auf das Ergebnis der vorherigen zu warten. Der Modus trägt auch dazu bei, die Arbeit bei Verbindungen mit langen Verzögerungen bei der Paketzustellung zu beschleunigen.
  • Erweiterte Funktionen für verteilte Konfigurationen mit mehreren PostgreSQL-Servern. Bei der Implementierung der logischen Replikation ist es nun möglich, laufende Transaktionen im Streaming-Modus zu senden, was die Leistung der Replikation großer Transaktionen erheblich verbessern kann. Darüber hinaus wurde die logische Dekodierung der bei der logischen Replikation empfangenen Daten optimiert.
  • Der Mechanismus zum Verbinden externer Tabellen Foreign Data Wrapper (postgres_fdw) hat Unterstützung für die parallele Abfrageverarbeitung hinzugefügt, die derzeit nur bei Verbindungen zu anderen PostgreSQL-Servern anwendbar ist. postgres_fdw bietet außerdem Unterstützung für das Hinzufügen von Daten zu externen Tabellen im Batch-Modus und die Möglichkeit, partitionierte Tabellen durch Angabe der Direktive „IMPORT FOREIGN SCHEMA“ zu importieren.
  • Es wurden Optimierungen an der Implementierung des VACUUM-Vorgangs (Garbage Collection und Packen von Festplattenspeicher) vorgenommen. Es wurde ein Notfallbereinigungsmodus hinzugefügt, der nicht unbedingt erforderliche Bereinigungsvorgänge überspringt, wenn Transaktions-ID-Wraparound-Bedingungen erstellt werden. Reduzierter Overhead bei der Verarbeitung von Indizes im B-Tree-Format. Die Ausführung der Operation „ANALYZE“, die Statistiken über den Betrieb der Datenbank sammelt, wurde deutlich beschleunigt.
  • Es wurde die Möglichkeit hinzugefügt, die im TOAST-System verwendete Komprimierungsmethode zu konfigurieren, die für die Speicherung großer Datenmengen wie Textblöcke oder geometrischer Informationen verantwortlich ist. Zusätzlich zur pglz-Komprimierungsmethode kann TOAST jetzt den LZ4-Algorithmus verwenden.
  • Die Tools zur Überwachung des Betriebs des DBMS wurden erweitert. Ansichten hinzugefügt, um den Fortschritt von COPY-Befehlen (pg_stat_progress_copy), Statistiken zu Replikationsslots (pg_stat_replication_slots) und Aktivitäten im Zusammenhang mit dem WAL-Transaktionsprotokoll (pg_stat_wal) zu verfolgen. Die Funktion „compute_query_id“ wurde hinzugefügt, die es verschiedenen Subsystemen wie pg_stat_activity und EXPLAIN VERBOSE ermöglicht, Anfragen zu verfolgen, indem jeder Anfrage eine eindeutige Kennung zugewiesen wird.
  • Dem Abfrageplaner wurden Optimierungen hinzugefügt, um die parallele Verarbeitung von Abfragen zu verbessern und die Leistung der gleichzeitigen Ausführung sequenzieller Datensatz-Scan-Vorgänge, der parallelen Ausführung von Abfragen in PL/pgSQL mit dem Befehl „RETURN QUERY“ und der parallelen Ausführung von Abfragen in „ MATERIALISIERTE ANSICHT AKTUALISIEREN“. Um die Leistung zyklischer verschachtelter Zusammenführungen (Join) zu verbessern, wurde Unterstützung für zusätzliches Caching implementiert.
  • Erweiterte Statistiken können jetzt zur Optimierung von Ausdrücken verwendet werden, und inkrementelle Sortierung kann jetzt zur Optimierung von Fensterfunktionen verwendet werden.
  • Gespeicherte Prozeduren, mit denen Sie Transaktionen in Codeblöcken verwalten können, unterstützen jetzt die Definition von Rückgabedaten mithilfe von „OUT“-Parametern.
  • Funktion date_bin hinzugefügt, um Zeitstempelwerte gemäß einem angegebenen Intervall zu runden. SELECT date_bin('15 Minuten', TIMESTAMP '2020-02-11 15:44:17', TIMESTAMP '2001-01-01'); 2020 02:11:15
  • Im SQL-Standard definierte SEARCH- und CYCLE-Ausdrücke wurden hinzugefügt, um die Reihenfolge und Identifizierung von Zyklen in rekursiven Common Table Expressions (CTE) zu erleichtern. 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;
  • Im psql-Dienstprogramm wurde die automatische Vervollständigung von Befehlen mit Tabulatoren verbessert, die Möglichkeit zur Anzeige von Funktionsargumenten wurde dem Befehl „\df“ hinzugefügt und die angezeigten Statistiken wurden auf den Befehl „\dX“ erweitert.
  • Es ist möglich, Benutzern nur Lese- oder Nur-Schreib-Rechte zuzuweisen. Mit den vordefinierten Rollen pg_read_all_data und pg_write_all_data können Berechtigungen für einzelne Tabellen, Ansichten und Schemata festgelegt werden. GRANT pg_read_all_data TO user1;
  • Bei Neuinstallationen wird standardmäßig die Passwortauthentifizierung mit SCRAM-SHA-256 anstelle von MD5 verwendet (der Parameter „password_encryption“ beim Generieren von postgresql.conf ist jetzt auf „scram-sha-256“ gesetzt).

Source: opennet.ru

Kommentar hinzufügen