PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL 11:Was ist neu

Die neuste und beste Version von PostgreSQL, v11, ist im Laufe dieser Woche fällig! Hier ist ein kurzer Blick auf die neuen Funktionen in dieser Version.

Partitionierungsverbesserungen

Die größten Verbesserungen betreffen die Partitionsunterstützung. Postgres 11 unterstützt:

  • Das Aktualisieren von Zeilen kann sie über Partitionen hinweg verschieben
  • Standardpartitionen
  • automatische Indexerstellung
  • Fremdschlüsseleinschränkungen werden auf partitionierten Tabellen unterstützt
  • eindeutige Indizes
  • Aggregations-Pushdown auf Partitionen
  • Partitionierung nach Hash
  • Untergeordnete Partitionen auf entfernten Servern (postgres_fdw) können aktualisiert werden
  • INSERT..ON CONFLICT wird auf partitionierten Tabellen unterstützt
  • effizientere Abfragepläne und schnellere Abfrageausführung

Lesen Sie hier mehr über diese Verbesserungen.

Mehr Parallelität

Es gibt eine Reihe von Verbesserungen auf breiter Front im Zusammenhang mit erhöhter Parallelität. Joins, Unions, Erstellung von Tabellen und Views mit „CREATE..AS SELECT“, bTree-Index-Erstellung und mehr profitieren von diesen Änderungen.

Hier ist ein Artikel über Leistungsverbesserungen bei der Indexerstellung in Postgres 11.

JIT-kompilierte Abfragen

Obwohl standardmäßig in 11 deaktiviert, ist die LLVM-basierte JIT-Kompilierung von Abfragen jetzt in Postgres integriert. Der Server kann jetzt bestimmte Abfragen (solche mit Ausführungsschätzungen über einem Schwellenwert) mithilfe von LLVM kompilieren, was zu schnelleren Abfragen führt. Diese Kompilierung erfolgt automatisch und ist für die Anwendung transparent.

Hier sind einige Zahlen.

Abdeckende Indizes

Covering-Indizes, die in anderen RDBMS verfügbar sind, aber nicht in PostgreSQL, wurden jetzt hinzugefügt. Damit ist ein Index wie dieser möglich (neue Syntax):

CREATE INDEX empid_idx ON employees(empid) INCLUDE (empname);

Ein solcher Index enthält zusätzliche Attribute (hier „empname“) im Index selbst und ermöglicht die Erfüllung von Abfragen wie:

SELECT empname FROM employees WHERE empid BETWEEN 1000 and 2000;

Verwenden Sie ausschließlich Index-Only-Scans und berühren Sie den Haufen überhaupt nicht.

Lesen Sie hier mehr über das Abdecken von Indizes.

Gespeicherte Prozeduren

Gespeicherte Prozeduren sind ein weiteres Beispiel dafür, wie PostgreSQL andere RDBMS einholt. Sie ähneln natürlich den gespeicherten Funktionen, die PostgreSQL seit langem unterstützt, aber das Einzige, was nur mit Prozeduren möglich ist, ist die Transaktionskontrolle. Sie können Transaktionen innerhalb gespeicherter Prozeduren festschreiben und rückgängig machen.

Sehen Sie sich die CREATE PROCEDURE-Dokumentation an.

Hinzufügen von Spalten zu Tabellen

Das Ändern einer Tabelle, um eine neue NOT NULL-Spalte mit einem DEFAULT-Wert hinzuzufügen, war in PostgreSQL ein bisschen mühsam, da dies dazu führte, dass der Server die gesamte Tabelle neu schrieb. Mit v11 ist es jetzt möglich, DDL-Anweisungen wie diese zu haben:

ALTER TABLE users ADD COLUMN foo_factor integer NOT NULL DEFAULT 42;

in konstanter Zeit ausführen. Zeilen werden bei dieser Ausführung nicht berührt und stattdessen „träge“ aktualisiert.

Lesen Sie hier mehr über diese Funktion.

SHA-Funktionen

Und schließlich können diejenigen unter Ihnen, die pgcrypto nur für SHA-Funktionen verwendet haben, jetzt zu den in PostgreSQL 11 integrierten Funktionen wechseln:

bench=# \df pg_catalog.sha*
                          List of functions
   Schema   |  Name  | Result data type | Argument data types | Type
------------+--------+------------------+---------------------+------
 pg_catalog | sha224 | bytea            | bytea               | func
 pg_catalog | sha256 | bytea            | bytea               | func
 pg_catalog | sha384 | bytea            | bytea               | func
 pg_catalog | sha512 | bytea            | bytea               | func
(4 rows)

bench=# SELECT sha256('hello');
                               sha256
--------------------------------------------------------------------
 \x2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
(1 row)