Den seneste og bedste udgivelse af PostgreSQL, v11, udkommer senere i denne uge! Her er et hurtigt kig på de nye funktioner i denne version.
Partitioneringsforbedringer
Det største sæt forbedringer er til partitionsunderstøttelse. Postgres 11 understøtter:
- opdatering af rækker kan flytte dem på tværs af partitioner
- standardpartitioner
- automatisk indeksoprettelse
- fremmednøglebegrænsninger understøttes på partitionerede tabeller
- unikke indekser
- aggregeringstryk ned til partitioner
- parition med hash
- underordnede partitioner på fjernservere (postgres_fdw) kan opdateres
- INSERT..ON CONFLICT understøttes på partitionerede tabeller
- mere effektive forespørgselsplaner og hurtigere udførelse af forespørgsler
Læs mere om disse forbedringer her.
Mere parallellisme
Der er en masse forbedringer over hele linjen relateret til øget parallellisme. Sammenslutninger, fagforeninger, oprettelse af tabeller og visninger med "CREATE..AS SELECT", oprettelse af træindeks og mere drage fordel af disse ændringer.
Her er en artikel om forbedringer af indeksoprettelse i Postgres 11.
JIT overholdte forespørgsler
Selvom den er deaktiveret som standard i 11, er LLVM-baseret JIT-kompilering af forespørgsler nu indbygget i Postgres. Serveren kan nu vælge at kompilere visse forespørgsler (dem med udførelsesestimater højere end en tærskelværdi) ved hjælp af LLVM, hvilket resulterer i hurtigere forespørgsler. Denne kompilering er automatisk og gennemsigtig for applikationen.
Her er nogle tal.
Dækkende indekser
Dækkende indekser, tilgængelige i andre RDBMS'er, men ikke PostgreSQL, er blevet tilføjet nu. Hermed er det muligt at have et indeks som dette (ny syntaks):
CREATE INDEX empid_idx ON employees(empid) INCLUDE (empname);
Et sådant indeks inkluderer ekstra attributter (her "empname") i selve indekset og gør det muligt at tilfredsstille forespørgsler som:
SELECT empname FROM employees WHERE empid BETWEEN 1000 and 2000;
udelukkende ved hjælp af kun indeksscanninger og slet ikke røre ved dyngen.
Læs mere om dækning af indekser her.
Lagrede procedurer
Lagrede procedurer er endnu et eksempel på, at PostgreSQL spiller indhente RDBMS'er. De ligner selvfølgelig lagrede funktioner, som PostgreSQL har understøttet længe, men den eneste store ting, der kun er mulig ved hjælp af procedurer er transaktionskontrol. Du kan forpligte og tilbageføre transaktioner fra lagrede procedurer.
Tag et kig på CREATE PROCEDURE-dokumentationen.
Tilføjelse af kolonner til tabeller
At ændre en tabel for at tilføje en ny NOT NULL-kolonne med en DEFAULT-værdi var lidt af en smerte i PostgreSQL, da dette fik serveren til at omskrive hele tabellen. Med v11 er det nu muligt at have DDL-sætninger som denne:
ALTER TABLE users ADD COLUMN foo_factor integer NOT NULL DEFAULT 42;
udføres i konstant tid. Rækker røres ikke, når dette udføres, og bliver i stedet opdateret "dovent".
Læs mere om denne funktion her.
SHA-funktioner
Og endelig kan de af jer, der kun brugte pgcrypto til SHA-funktioner, nu skifte til at bruge dem, der er indbygget 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)