Efter et års udvikling er den nye stabile version af databasen PostgreSQL 17 blevet offentliggjort. Opdateringer til den nye version vil blive udgivet i de næste fem år frem til november 2029. Støtten til PostgreSQL 12.x, den ældste understøttede version, vil ophøre den 14. november.
Hovednyhederne:
- Under udførelsen af operationen VACUUM (affaldssamling, oprydning og pakning af diskopbevaring) er en ny datstruktur blevet taget i brug, som kræver op til 20 gange mindre hukommelse. Overgangen til den nye struktur har gjort det muligt at fremskynde VACUUM-operationer og reducere forbruget af delte ressourcer.
- Optimeringen af input/output-ydeevnen er fortsat. Takket være forbedringen af koden til behandling af WAL-loggen (Write Ahead Log) er det lykkedes at fordoble båndbredden for skriveoperationer i systemer med mange samtidige anmodninger. Et nyt interface til streamet input/output er blevet foreslået, hvilket har øget hastigheden ved sekventiel gennemgang af data i tabeller og fremskyndet opdateringen af statistik til forespørgselsplanlæggeren efter udførelsen af operationen ANALYZE.
- Ydeevnen for forespørgsler med «IN»-udtryk er forbedret, når der anvendes indekser baseret på B-tree-strukturen. Muligheden for parallel opbygning af BRIN-indekser (Block Range Index) er implementeret. I forespørgselsplanlæggeren er kontrol af «NOT NULL» optimeret, og behandlingen af Common Table Expressions (CTE), der defineres ved hjælp af SQL-kommandoen «WITH», er blevet fremskyndet. Der er sikret brug af vektorprocessor-instruktioner (SIMD) til at accelerere beregninger, eksempelvis er AVX-512-instruktioner blevet anvendt til at fremskynde funktionen bit_count.
- Der er implementeret støtte til nye funktioner til arbejde med JSON-formatet, som defineret i standarden SQL/JSON. Funktionen JSON-TABLE er tilføjet for at konvertere data fra JSON-format til almindelige PostgreSQL-tabeller, samt nye jsonpath-operatører til at konvertere JSON-data til PostgreSQLs indfødte datatyper. Nye funktioner er foreslået til oprettelse (JSON, JSON_SCALAR og JSON_SERIALIZE) og forespørgsel (JSON_EXISTS, JSON_QUERY og JSON_VALUE) af data i JSON-format.
- SQL-kommandoen «MERGE» har fået udvidede funktioner, der gør det muligt at oprette betingede SQL-udtryk, som kombinerer operationerne INSERT, UPDATE og DELETE i ét udtryk. Støtten for RETURNING-udtrykket er blevet tilføjet, hvilket muliggør beregning og returnering af værdier baseret på tilføjede, opdaterede eller slettede rækker. Der er implementeret støtte til opdatering af visninger.
- Mulighederne for dataindlæsning og eksport i batchtilstand er blevet udvidet. I COPY-kommandoen er eksporthastigheden for store rækker op til dobbelt så hurtig, kopieringen ved match mellem kilde- og målcoderinger er optimeret, og der er tilføjet en ON_ERROR-option, som tillader fortsat import efter fejl ved indsættelse af data.
- For partitionerede tabeller er der tilføjet muligheden for at bruge kolonner med unikke identifikatorer og støtte til optimeringsteknikken «Constraint exclusion».
- I mekanismen til tilslutning af eksterne tabeller, Foreign Data Wrapper (postgres_fdw), er der implementeret muligheden for at transmittere til eksterne server subforespørgsler «EXISTS» og «IN».
- Der er implementeret en indbygget platformuafhængig motor til behandling af lokalitetsegenskaber «Collation», der anvendes til at definere sorteringsregler og metoder til sammenligning med hensyn til tegns betydning (for eksempel tages der hensyn til minus og punktum foran et tal og forskellige former for skrivemåde ved sortering af numeriske værdier, mens store og små bogstaver samt tilstedeværelsen af accenter ignoreres ved sammenligning). Den nye motor garanterer ensartet adfærd ved sortering af resultater uanset, hvilken platform PostgreSQL kører på.
- I mekanismen til logisk replikation, der muliggør transmission af ændringer til en anden server, foretaget ved tilføjelse, sletning eller opdatering af poster i databasen, er processen for opdatering af DBMS blevet forenklet. Tidligere måtte man slette slots for logisk replikation og synkronisere dataene igen, når der blev skiftet til en ny væsentlig version, men nu kan man undgå at slette slots. For fejlretning er der implementeret muligheden for at styre failover til en backupserver for logisk replikation. Der er tilføjet et nyt værktøj, pg_createsubscriber, til at konvertere en fysisk replika til en ny logisk replika.
- En ny mulighed «sslnegotiation» er tilføjet til direkte forhandling af sikre TLS-forbindelser ved hjælp af TLS-udvidelsen ALPN.
- Den prædefinerede rolle pg_maintain er implementeret, som giver brugeren ret til at udføre operationer relateret til vedligeholdelse af databasen.
- I værktøjet pg_basebackup, der bruges til at lave databasebackup, er der tilføjet støtte til inkrementelle sikkerhedskopier. For at rekonstruere en fuld backup fra et sæt inkrementelle sikkerhedskopier er der foreslået et nyt værktøj pg_combinebackup. I værktøjet pg_dump er der tilføjet en mulighed «—filter» til at vælge de objekter, der skal inkluderes i dumpen.
- Ved analyse af forespørgsler med SQL-kommandoen «EXPLAIN» er der implementeret output af den tid, der er brugt på at læse og skrive lokale blokke ved input/output. Der er også tilføjet to nye muligheder til kommandoen «EXPLAIN»: «MEMORY» og «SERIALIZE», som gør det muligt at bestemme størrelsen på den anvendte hukommelse og den tid, der er brugt på at konvertere data til overførsel via netværket.
- Der er sikret indikator for fremdrift under udførelse af operationen VACUUM med indekser.
- Det systemiske udsyn pg_wait_events er blevet tilføjet, som sammen med udsynet pg_stat_activity giver mulighed for en mere detaljeret undersøgelse af årsagerne til, at aktive sessioner er i ventetilstand.
Kilde: opennet.ru
