Efter et års udvikling er den nye stabile version af databasesystemet PostgreSQL 14 nu offentliggjort. Opdateringer til den nye version vil blive udsendt i de næste fem år frem til november 2026.
Hovednyhederne:
- Der er tilføjet support til adgang til JSON-data ved hjælp af udtryk, der minder om arbejde med arrays: SELECT (‘{ "postgres": { "release": 14 }}’::jsonb)[‘postgres’][‘release’]; SELECT * FROM test WHERE details[‘attributes’][‘size’] = ‘"medium"‘;
En tilsvarende syntaks er også implementeret til data i nøgle/værdi-format, som leveres af typen hstore. Denne syntaks blev oprindeligt realiseret ved hjælp af et universelt framework, der i fremtiden kan anvendes til andre typer. Eksempel for typen hstore: INSERT INTO mytable VALUES (‘a=>b, c=>d’); SELECT h[‘a’] FROM mytable; UPDATE mytable SET h[‘c’] = ‘new’;
- Familien af typer til definition af intervaller er blevet udvidet med nye typer "multirange", der muliggør oprettelse af ordnede lister af ikke-overlappende intervaller. Der er foreslået en multirange-type for hver eksisterende range-type, for eksempel svarer typen "int4range" til "int4multirange", og "daterange" til "datemultirange". Anvendelsen af de nye typer gør det lettere at formulere forespørgsler, der manipulerer komplekse sekvenser af intervaller. SELECT ‘{[3,7), [8,9)}’::int4multirange; SELECT nummultirange(numrange(1.0, 14.0), numrange(20.0, 25.0));
- Der er foretaget optimeringer for at forbedre ydeevnen i højt belastede systemer, der håndterer et stort antal forbindelser. I nogle test er der observeret en fordobling af ydeevnen.
- Effektiviteten af B-tree indekser er forbedret, og der er løst et problem med væksten af indekser ved hyppig opdatering af tabeller.
- Der er tilføjet support til en klient-side (realiseret på niveauet libpq) pipeline-tilstand for overførsel af forespørgsler, som væsentligt kan fremskynde scenarier relateret til udførelse af et stort antal små skrivemæssige operationer (INSERT/UPDATE/DELETE) ved at sende den næste forespørgsel uden at vente på resultatet af den forrige. Tilstanden hjælper også med at fremskynde arbejdet ved forbindelser med store forsinkelser i pakkeleveringen.
- Mulighederne for distribuerede konfigurationer, der inkluderer flere servere PostgreSQL. I implementeringen af logisk replikation er der tilføjet mulighed for at sende transaktioner, der er i udførelse, i streamet tilstand, hvilket væsentligt forbedrer ydeevnen ved replikation af store transaktioner. Derudover er den logiske dekodning af dataene, der sendes under den logiske replikation, blevet optimeret.
- I mekanismen til forbindelse af eksterne tabeller, Foreign Data Wrapper (postgres_fdw), er der tilføjet support til parallel behandling af forespørgsler, der i øjeblikket kun gælder ved forbindelse til andre PostgreSQL-servere. I postgres_fdw er der også tilføjet support til at tilføje data til eksterne tabeller i batchtilstand samt mulighed for at importere partitionerede tabeller ved at angive direktivet "IMPORT FOREIGN SCHEMA".
- Der er blevet gennemført optimeringer i implementeringen af VACUUM-operationen (affaldssamling og pakning af datalagring). En nødrensningsfunktion ("emergency mode") er blevet tilføjet, som udelader uvæsentlige rengøringsoperationer, hvis der skabes forhold for at gå ind i anden runde af transaktions-ID'ernes cykel (transaction ID wraparound). Omkostningerne ved behandling af indeks i B-Tree-format er blevet reduceret. Udførelsen af "ANALYZE"-operationen, der indsamler statistik om databasens drift, er blevet væsentligt accelereret.
- Muligheden for at justere den komprimeringsmetode, der anvendes i TOAST-systemet, der er ansvarlig for opbevaring af store data som tekstblokke eller geometrisk information, er blevet tilføjet. Udover komprimeringsmetoden pglz kan TOAST nu også bruge LZ4-algoritmen.
- Værktøjerne til overvågning af databasesystemets aktivitet er blevet udvidet. Der er tilføjet visninger til at spore fremdriften af "COPY"-kommandoer (pg_stat_progress_copy), statistik om replikationsslots (pg_stat_replication_slots) og aktivitet relateret til transaktions-WAL-loggen (pg_stat_wal). Funktionen compute_query_id, som inkluderer sporing af forespørgsler med tildeling af et unikt ID for hver forespørgsel i forskellige subsystemer som pg_stat_activity og EXPLAIN VERBOSE, er blevet tilføjet.
- Planlæggeren for forespørgsler er blevet opdateret med optimeringer, der forbedrer parallel behandling af forespørgsler og gør det muligt at øge ydeevnen ved samtidig udførelse af operationer i sekventiel scanning af poster, parallelt kørende forespørgsler i PL/pgSQL ved hjælp af kommandoen «RETURN QUERY» samt parallelt udførelse af forespørgsler i «REFRESH MATERIALIZED VIEW». For at forbedre ydeevnen ved cykliske indlejrede sammenføjninger (join) er støtte til ekstra caching blevet implementeret.
- For optimering af udtryk kan der nu anvendes udvidet statistik, og til optimering af vinduesfunktioner kan inkrementel sortering anvendes.
- I gemte procedurer, der muliggør styring af transaktioner i kodeblokke, er der blevet implementeret støtte til bestemmelse af returnerede data ved hjælp af «OUT» parametre.
- Funktionen date_bin er blevet tilføjet for at afrunde værdier af typen timestamp i henhold til det angivne interval. SELECT date_bin(’15 minutes’, TIMESTAMP ‘2020-02-11 15:44:17’, TIMESTAMP ‘2001-01-01’); 2020-02-11 15:30:00
- Der er blevet tilføjet de i SQL-standarden definerede udtryk SEARCH og CYCLE, som forenkler sortering og identificering af cykler i rekursive generelle tabeludtryk (Common Table Expression, CTE). WITH RECURSIVE search_tree(id, link, data) AS ( SELECT t.id, t.link, t.data FROM tree t UNION ALL SELECT t.id, t.link, t.data FROM tree t, search_tree st WHERE t.id = st.link ) SEARCH DEPTH FIRST BY id SET ordercol SELECT * FROM search_tree ORDER BY ordercol;
- I værktøjet psql er autoudfyldning af kommandoer forbedret ved hjælp af tabulator, kommandoen «\df» har fået mulighed for at vise funktionernes argumenter, og i kommandoen «\dX» er den viste statistik blevet udvidet.
- Der er nu mulighed for at tildele brugere privilegier, der kun tillader læsning eller skrivning. Privilegier kan tildeles i forbindelse med enkeltstående tabeller, visninger og skemaer ved hjælp af de prædefinerede roller pg_read_all_data og pg_write_all_data. GRANT pg_read_all_data TO user1;
- I nye installationer er der som standard sikret brug af adgangskodeautentifikation med SCRAM-SHA-256 metoden i stedet for md5 (parameteren «password_encryption» i genereringen af postgresql.conf er nu indstillet til værdien ‘scram-sha-256’).
Kilde: opennet.ru
