Den senaste och bästa versionen av PostgreSQL, v11, kommer senare denna vecka! Här är en snabb titt på de nya funktionerna i den här versionen.
Partitioneringsförbättringar
Den största uppsättningen förbättringar är för partitionsstöd. Postgres 11 stöder:
- att uppdatera rader kan flytta dem över partitioner
- standardpartitioner
- automatiskt indexskapande
- Främmande nyckelbegränsningar stöds på partitionerade tabeller
- unika index
- aggregationstryck ned till partitioner
- parition med hash
- underordnade partitioner på fjärrservrar (postgres_fdw) kan uppdateras
- INSERT..ON CONFLICT stöds på partitionerade tabeller
- effektivare frågeplaner och snabbare sökexekvering
Läs mer om dessa förbättringar här.
Mer parallellism
Det finns ett gäng förbättringar över hela linjen relaterade till ökad parallellism. Anslutningar, fackföreningar, skapande av tabeller och vyer med "CREATE..AS SELECT", skapande av trädindex och mer dra nytta av dessa ändringar.
Här är en artikel om prestandaförbättringar för att skapa index i Postgres 11.
JIT-kompatibla frågor
Även om den är inaktiverad som standard i 11, är LLVM-baserad JIT-kompilering av frågor nu inbyggd i Postgres. Servern kan nu välja att kompilera vissa frågor (de med exekveringsuppskattningar högre än ett tröskelvärde) med hjälp av LLVM, vilket resulterar i snabbare frågor. Denna sammanställning är automatisk och transparent för applikationen.
Här är några siffror.
Täckande index
Täckande index, tillgängliga i andra RDBMSer men inte PostgreSQL, har lagts till nu. Med detta är det möjligt att ha ett index som detta (ny syntax):
CREATE INDEX empid_idx ON employees(empid) INCLUDE (empname);
Ett sådant index inkluderar extra attribut (här "empname") i själva indexet och gör det möjligt att tillfredsställa frågor som:
SELECT empname FROM employees WHERE empid BETWEEN 1000 and 2000;
helt och hållet genom att använda endast index-skanningar och inte röra högen alls.
Läs mer om att täcka index här.
Lagrade procedurer
Lagrade procedurer är ytterligare ett exempel på att PostgreSQL spelar catch up tooth RDBMS:er. De liknar naturligtvis lagrade funktioner som PostgreSQL har stöttat sedan länge, men den enda stora sak som bara är möjlig med hjälp av procedurer är transaktionskontroll. Du kan utföra och återställa transaktioner från lagrade procedurer.
Ta en titt på CREATE PROCEDURE-dokumentationen.
Lägga till kolumner i tabeller
Att ändra en tabell för att lägga till en ny NOT NULL-kolumn med ett DEFAULT-värde var lite jobbigt i PostgreSQL, eftersom detta fick servern att skriva om hela tabellen. Med v11 är det nu möjligt att ha DDL-satser så här:
ALTER TABLE users ADD COLUMN foo_factor integer NOT NULL DEFAULT 42;
utföra i konstant tid. Rader berörs inte när detta utförs, utan uppdateras istället "lätt".
Läs mer om den här funktionen här.
SHA-funktioner
Och slutligen, de av er som endast använde pgcrypto för SHA-funktioner kan nu byta till att använda de inbyggda i PostgreSQL 11:
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)