Nach einem Jahr der Entwicklung wurde ein neuer stabiler Zweig des PostgreSQL 17 DBMS veröffentlicht. Updates für den neuen Zweig werden über einen Zeitraum von fünf Jahren bis November 2029 veröffentlicht. PostgreSQL 12.x, der älteste unterstützte Zweig, endet am 14. November.
Wichtigste Neuerungen:
- Bei der Durchführung einer VACUUM-Operation (Garbage Collection, Bereinigen und Packen des Festplattenspeichers) wird eine neue Datenstruktur verwendet, die bis zu 20-mal weniger Speicher verbraucht. Der Übergang zur neuen Struktur ermöglichte eine schnellere Ausführung des VACUUM-Betriebs und eine Reduzierung des Verbrauchs gemeinsam genutzter Ressourcen.
- Kontinuierliche Optimierung der I/O-Leistung. Verbesserungen am Code für die Verarbeitung von WAL-Lazy-Write-Protokollen haben den Schreibdurchsatz auf Systemen mit einer großen Anzahl gleichzeitiger Abfragen um das Zweifache erhöht. Es wurde eine neue Streaming-I/O-Schnittstelle vorgeschlagen, um die Geschwindigkeit der sequentiellen Datensuche in Tabellen zu erhöhen und die Aktualisierung von Statistiken für den Abfrageplaner nach der Durchführung der ANALYZE-Operation zu beschleunigen.
- Verbesserte Leistung für IN-Abfragen, wenn sie B-Tree-Indizes verwenden. Die Möglichkeit der parallelen Konstruktion von BRIN-Indizes (Block Range Index) wurde implementiert. Der Abfrageplaner hat „NOT NULL“-Prüfungen optimiert und die Verarbeitung von Common Table Expressions (CTE) beschleunigt, die mit dem SQL-Befehl „WITH“ definiert wurden. Um einige Berechnungen zu beschleunigen, wird die Verwendung von Vektorprozessoranweisungen (SIMD) bereitgestellt. Beispielsweise werden AVX-512-Anweisungen verwendet, um die Funktion bit_count zu beschleunigen.
- Unterstützung für neue Funktionen für die Arbeit mit dem im SQL/JSON-Standard definierten JSON-Format wurde implementiert. JSON-TABLE-Funktion zum Konvertieren von JSON-Daten in reguläre PostgreSQL-Tabellen sowie neue JSONPath-Operatoren zum Konvertieren von JSON-Daten in native PostgreSQL-Datentypen hinzugefügt. Es wurden neue Funktionen zum Erstellen (JSON, JSON_SCALAR und JSON_SERIALIZE) und Abfragen (JSON_EXISTS, JSON_QUERY und JSON_VALUE) von Daten im JSON-Format vorgeschlagen.
- Die Funktionen des SQL-Befehls „MERGE“ wurden erweitert, sodass Sie bedingte SQL-Ausdrücke erstellen können, die INSERT-, UPDATE- und DELETE-Operationen in einem Ausdruck kombinieren. Unterstützung für den RETURNING-Ausdruck hinzugefügt, der es Ihnen ermöglicht, Werte basierend auf hinzugefügten, aktualisierten oder gelöschten Zeilen zu berechnen und zurückzugeben. Unterstützung für die Aktualisierung von Ansichten wurde implementiert.
- Die Möglichkeiten zum Laden und Exportieren von Daten im Batch-Modus wurden erweitert. Im COPY-Befehl wurde die Geschwindigkeit beim Exportieren großer Zeichenfolgen auf das Doppelte erhöht, das Kopieren bei übereinstimmenden Quell- und Zielkodierungen optimiert und die Option ON_ERROR hinzugefügt, die es Ihnen ermöglicht, den Import nach Fehlern beim Einfügen von Daten fortzusetzen .
- Für partitionierte Tabellen wurde die Möglichkeit hinzugefügt, Spalten mit eindeutigen Bezeichnern zu verwenden und die Abfrageoptimierungstechnik „Einschränkungsausschluss“ zu unterstützen.
- Der Foreign Data Wrapper (postgres_fdw)-Mechanismus zum Verbinden externer Tabellen ermöglicht nun die Übertragung von Daten an ein externes Server Unterabfragen "EXISTS" und "IN".
- Für die Verarbeitung der Eigenschaften des Gebietsschemas „Collation“ wurde eine integrierte plattformunabhängige Engine implementiert, mit der Sortierregeln und Vergleichsmethoden unter Berücksichtigung der Bedeutung von Zeichen festgelegt werden (z. B. beim Sortieren digitaler Werte das Vorhandensein eines Minus und ein Punkt vor einer Zahl sowie verschiedene Schreibweisen werden berücksichtigt, beim Vergleich werden jedoch die Groß-/Kleinschreibung und das Vorhandensein eines Akzentzeichens nicht berücksichtigt. Die neue Engine garantiert ein einheitliches Verhalten beim Sortieren von Abfrageergebnissen, unabhängig davon, auf welcher Plattform PostgreSQL läuft.
- Der logische Replikationsmechanismus, der es ermöglicht, Änderungen an der Datenbank während des Hinzufügens, Löschens oder Aktualisierens von Datensätzen auf einen anderen Server zu übertragen, vereinfacht den Prozess der Aktualisierung des DBMS. Musste man bisher bei der Migration auf eine neue Hauptversion logische Replikationsslots entfernen und die Daten neu synchronisieren, kann man nun auf das Löschen der Slots verzichten. Für fehlertolerante Konfigurationen wurde die Möglichkeit implementiert, den Wechsel zu einem Backup-Server (Failover) für die logische Replikation zu steuern. Ein neues Dienstprogramm pg_createsubscriber wurde hinzugefügt, um ein physisches Replikat in ein neues logisches Replikat zu konvertieren.
- Es wurde eine neue Option „sslnegotiation“ hinzugefügt, um sichere TLS-Verbindungen mithilfe der ALPN-TLS-Erweiterung direkt auszuhandeln.
- Die vordefinierte Rolle pg_maintain wurde implementiert und gibt dem Benutzer das Recht, Vorgänge im Zusammenhang mit der Wartung des DBMS durchzuführen.
- Dem Dienstprogramm pg_basebackup, das zum Erstellen von Datenbanksicherungen verwendet wird, wurde Unterstützung für inkrementelle Sicherungen hinzugefügt. Um eine vollständige Sicherung aus einer Reihe inkrementeller Kopien zu rekonstruieren, wurde ein neues Dienstprogramm pg_combinebacku vorgeschlagen. Die Option „--filter“ wurde dem Dienstprogramm pg_dump hinzugefügt, um Objekte auszuwählen, die in den Dump aufgenommen werden sollen.
- Bei der Analyse von Abfragen mit dem SQL-Befehl „EXPLAIN“ wird die Zeit angezeigt, die für das Lesen und Schreiben lokaler Blöcke während der E/A aufgewendet wird. Der EXPLAIN-Befehl fügt außerdem zwei neue Optionen hinzu, MEMORY und SERIALIZE, mit denen Sie die Menge des verwendeten Speichers und die Zeit bestimmen können, die für die Konvertierung von Daten für die Übertragung über das Netzwerk aufgewendet wird.
- Bietet einen Hinweis auf den Fortschritt des VACUUM-Vorgangs mit Indizes.
- Die Systemansicht pg_wait_events wurde hinzugefügt, die Ihnen in Kombination mit der Ansicht pg_stat_activity einen Drilldown ermöglicht, um herauszufinden, warum sich aktive Sitzungen im Wartezustand befinden.
Source: opennet.ru
