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
