Nach einem Jahr der Entwicklung wurde der neue stabile Branch der Datenbank PostgreSQL 17 veröffentlicht. Updates für den neuen Branch werden fünf Jahre lang bis November 2029 bereitgestellt. Die Unterstützung für PostgreSQL 12.x, den ältesten unterstützten Branch, wird am 14. November eingestellt.
Hauptneuheiten:
- Bei der Ausführung der VACUUM-Operation (Müllsammlung, Reinigung und Verpackung des Datenspeichers) ist eine neue Datenstruktur eingeführt worden, die bis zu 20 Mal weniger Speicher benötigt. Der Wechsel zu dieser neuen Struktur hat die Ausführung von VACUUM-Operationen beschleunigt und den Verbrauch gemeinsam genutzter Ressourcen reduziert.
- Die Optimierung der Eingabe-/Ausgabeleistung wurde fortgesetzt. Durch die Verbesserung des Codes zur Verarbeitung des Write-Ahead Logging (WAL) konnte die Durchsatzrate von Schreiboperationen in Systemen mit einer hohen Anzahl gleichzeitig ausgeführter Abfragen verdoppelt werden. Eine neue Schnittstelle für das Streamen von Ein-/Ausgaben wurde vorgeschlagen, die die Geschwindigkeit der sequentiellen Datenabfrage in Tabellen erhöht hat und die Aktualisierung der Statistiken für den Abfrageplaner nach der Ausführung der ANALYZE-Operation beschleunigt hat.
- Die Leistung von Abfragen mit dem Ausdruck „IN“ wurde erhöht, wenn Indexe auf der Basis der B-Tree-Struktur verwendet werden. Die Möglichkeit des parallelen Aufbaus von BRIN-Indexen (Block Range Index) wurde implementiert. Im Abfrageplaner wurden die Überprüfungen auf „NOT NULL“ optimiert und die Verarbeitung von Common Table Expressions (CTE), die mit dem SQL-Befehl „WITH“ definiert werden, beschleunigt. Der Einsatz von Vektorprozessoranweisungen (SIMD) zur Beschleunigung bestimmter Berechnungen, beispielsweise für die Funktion bit_count, wurde durch AVX-512-Anweisungen realisiert.
- Unterstützung neuer Funktionen für die Arbeit mit dem JSON-Format, wie im SQL/JSON-Standard definiert, wurde implementiert. Die Funktion JSON-TABLE wurde hinzugefügt, um Daten aus dem JSON-Format in gewöhnliche PostgreSQL-Tabellen zu konvertieren, sowie neue jsonpath-Operatoren zur Konvertierung von JSON-Daten in native PostgreSQL-Datentypen. Neue Funktionen zur Erstellung (JSON, JSON_SCALAR und JSON_SERIALIZE) und Abfrage (JSON_EXISTS, JSON_QUERY und JSON_VALUE) von Daten im JSON-Format wurden vorgeschlagen.
- Die Möglichkeiten des SQL-Befehls „MERGE“ wurden erweitert, der bedingte SQL-Ausdrücke ermöglicht, welche INSERT-, UPDATE- und DELETE-Operationen in einer einzigen Anweisung kombinieren. Es wurde Unterstützung für den RETURNING-Ausdruck hinzugefügt, der es ermöglicht, Werte basierend auf hinzugefügten, aktualisierten oder gelöschten Zeilen zu berechnen und zurückzugeben. Die Unterstützung für die Aktualisierung von Sichten wurde realisiert.
- Die Möglichkeiten zum Laden und Exportieren von Daten im Batch-Modus wurden erweitert. In der COPY-Anweisung wurde die Exportgeschwindigkeit großer Zeilen bis zu zweimal erhöht, das Kopieren bei Übereinstimmung der Quell- und Zielcodierungen optimiert und die ON_ERROR-Option hinzugefügt, die es ermöglicht, den Import nach Fehlern beim Einfügen von Daten fortzusetzen.
- Für partitionierte Tabellen wurde die Möglichkeit zur Verwendung von Spalten mit eindeutigen Identifikatoren und Unterstützung für die Optimierungstechnik „Constraint exclusion“ hinzugefügt.
- Im System zum Anschluss externer Tabellen Foreign Data Wrapper (postgres_fdw) wurde die Möglichkeit zur Übertragung an externe Server Unterabfragen „EXISTS“ und „IN“ realisiert.
- Ein eingebauter plattformunabhängiger Motor zur Verarbeitung von Locale-Eigenschaften („Collation“), der zur Festlegung von Sortierregeln und zu Methoden zur sinnvollen Zeichenvergleich verwendet wird, wurde implementiert (z. B. werden bei der Sortierung numerischer Werte das Vorhandensein von Minus und Punkt vor der Zahl sowie verschiedene Schreibweisen berücksichtigt, während bei Vergleichen die Groß-/Kleinschreibung und die Anwesenheit von Akzenten nicht beachtet werden). Der neue Motor garantiert ein einheitliches Verhalten bei der Sortierung von Abfrageergebnissen, unabhängig von der Plattform, auf der PostgreSQL ausgeführt wird.
- Im Mechanismus der logischen Replikation, der die Übertragung von Änderungen an einen anderen Server ermöglicht, die in der DB während des Hinzufügens, Löschens oder Aktualisierens von Datensätzen vorgenommen werden, wurde der Aktualisierungsprozess der DBMS vereinfacht. Wenn früher beim Übergang zu einer neuen bedeutenden Version die Slots der logischen Replikation entfernt und die Daten erneut synchronisiert werden mussten, kann jetzt auf das Löschen von Slots verzichtet werden. Für fehlertolerante Konfigurationen wurde die Möglichkeit zur Steuerung des Wechsels zu einem Backup-Server (Failover) für die logische Replikation implementiert. Ein neues Dienstprogramm pg_createsubscriber wurde hinzugefügt, um eine physische Replik in eine neue logische Replik umzuwandeln.
- Eine neue Option „sslnegotiation“ wurde hinzugefügt, um gesicherte TLS-Verbindungen direkt mit der TLS-Erweiterung ALPN zu vereinbaren.
- Die vordefinierte Rolle pg_maintain wurde implementiert, die dem Benutzer das Recht zur Durchführung von Wartungsoperationen für die DBMS einräumt.
- Das Dienstprogramm pg_basebackup, das zum Erstellen von Datenbanksicherungen verwendet wird, hat Unterstützung für inkrementelle Backups erhalten. Ein neues Dienstprogramm pg_combinebackup wurde vorgeschlagen, um vollständige Backups aus einer Reihe von inkrementellen Kopien zu rekonstruieren. Im Dienstprogramm pg_dump wurde die Option „—filter“ hinzugefügt, um die in das Dump einzuschließenden Objekte auszuwählen.
- Bei der Analyse von Abfragen mit dem SQL-Befehl „EXPLAIN“ wurde die Ausgabe der Zeit implementiert, die für das Lesen und Schreiben lokaler Blöcke beim Ein-/Ausgabevorgang aufgebracht wird. Dem Befehl „EXPLAIN“ wurden auch zwei neue Optionen „MEMORY“ und „SERIALIZE“ hinzugefügt, mit denen die Größe des verwendeten Speichers und die Zeit, die für die Umwandlung von Daten zur Übertragung über das Netzwerk benötigt wird, bestimmt werden können.
- Es wurde eine Fortschrittsanzeige für die Ausführung von VACUUM-Operationen mit Indizes bereitgestellt.
- Eine Systemansicht pg_wait_events wurde hinzugefügt, die zusammen mit der Ansicht pg_stat_activity eine detailliertere Untersuchung der Gründe für das Warten aktiver Sitzungen ermöglicht.
Quelle: opennet.ru
