Efter et års udvikling er en ny stabil gren af PostgreSQL 14 DBMS blevet offentliggjort. Opdateringer til den nye gren vil blive frigivet over fem år indtil november 2026.
Vigtigste innovationer:
- Tilføjet understøttelse af adgang til JSON-data ved hjælp af array-lignende udtryk: SELECT ('{ "postgres": { "release": 14 }}'::jsonb)['postgres']['release']; SELECT * FROM test WHERE detaljer['attributes']['size'] = '"medium"';
En lignende syntaks er implementeret for nøgle/værdi-data, der leveres af hstore-typen. Denne syntaks blev oprindeligt implementeret ved hjælp af en universel ramme, som i fremtiden kan bruges til andre typer. Eksempel på hstore type: INSERT INTO mytable VALUES ('a=>b, c=>d'); VÆLG h['a'] FRA mytabel; UPDATE mytable SET h['c'] = 'ny';
- Familien af typer til at definere områder er blevet udvidet med nye "multirange" typer, som giver dig mulighed for at specificere ordnede lister over ikke-overlappende værdiområder. Ud over hver eksisterende intervaltype foreslås dens egen multirange-type, f.eks. svarer typen "int4range" til "int4multirange", og typen "daterange" svarer til "datemultirange". Brugen af nye typer forenkler designet af forespørgsler, der manipulerer komplekse sekvenser af områder. VÆLG '{[3,7), [8,9)}'::int4multirange; SELECT nummultirange(antalrange(1.0, 14.0), numrange(20.0, 25.0));
- Der er foretaget optimeringer for at forbedre ydeevnen af højbelastningssystemer, der behandler et stort antal forbindelser. I nogle tests observeres en fordobling af ydeevnen.
- Effektiviteten af B-træ-indekser er blevet forbedret, og problemet med indeksvækst, når tabeller ofte opdateres, er blevet løst.
- Tilføjet understøttelse af tilstanden på klientsiden (implementeret på libpq-niveau) for pipeline-transmission af anmodninger, som giver dig mulighed for betydeligt at fremskynde databasescenarier forbundet med at udføre et stort antal små skriveoperationer (INSERT/UPDATE/DELETE) ved at sende næste anmodning uden at vente på resultatet af den forrige. Tilstanden hjælper også med at fremskynde arbejdet på forbindelser med lange pakkeleveringsforsinkelser.
- Forbedrede muligheder for distribuerede konfigurationer, der involverer flere PostgreSQL-servere. Implementeringen af logisk replikering har nu mulighed for at sende transaktioner i gang i streaming-tilstand, hvilket kan forbedre ydeevnen for replikering af store transaktioner markant. Derudover er den logiske afkodning af data modtaget under logisk replikering blevet optimeret.
- Foreign Data Wrapper (postgres_fdw)-mekanismen til at forbinde eksterne tabeller har tilføjet understøttelse af parallel forespørgselsbehandling, som i øjeblikket kun er anvendelig, når der oprettes forbindelse til andre PostgreSQL-servere. postgres_fdw tilføjer også understøttelse for at tilføje data til eksterne tabeller i batch-tilstand og muligheden for at importere partitionerede tabeller ved at specificere "IMPORT FOREIGN SCHEMA"-direktivet.
- Der er foretaget optimering af implementeringen af VACUUM-operationen (affaldsopsamling og pakning af disklager). En nødoprydningstilstand er blevet tilføjet, der springer ikke-essentielle oprydningsoperationer over, hvis transaktions-id-omslutningsbetingelser er oprettet. Reduceret overhead ved behandling af indekser i B-Tree-formatet. Udførelsen af "ANALYSE" operationen, som indsamler statistik om driften af databasen, er blevet væsentligt fremskyndet.
- Tilføjet muligheden for at konfigurere komprimeringsmetoden, der bruges i TOAST-systemet, som er ansvarlig for lagring af store data, såsom tekstblokke eller geometrisk information. Ud over pglz-komprimeringsmetoden kan TOAST nu bruge LZ4-algoritmen.
- Værktøjerne til at overvåge driften af DBMS er blevet udvidet. Tilføjede visninger til at spore fremskridtene for COPY-kommandoer (pg_stat_progress_copy), statistik om replikeringspladser (pg_stat_replication_slots) og aktivitet relateret til WAL-transaktionsloggen (pg_stat_wal). Funktionen compute_query_id er blevet tilføjet, som gør det muligt for forskellige undersystemer, såsom pg_stat_activity og EXPLAIN VERBOSE, at spore anmodninger ved at tildele en unik identifikator for hver anmodning.
- Optimeringer er blevet tilføjet til forespørgselsplanlæggeren for at forbedre parallel behandling af forespørgsler og forbedre ydeevnen af samtidig udførelse af sekventielle registreringsscanningsoperationer, parallel udførelse af forespørgsler i PL/pgSQL ved hjælp af kommandoen "RETURN QUERY" og parallel udførelse af forespørgsler i " OPFRISK MATERIALISERET VISNING”. For at forbedre ydeevnen af cykliske indlejrede fletninger (join), er understøttelse af yderligere caching blevet implementeret.
- Avanceret statistik kan nu bruges til at optimere udtryk, og trinvis sortering kan nu bruges til at optimere vinduesfunktioner.
- Lagrede procedurer, der giver dig mulighed for at administrere transaktioner i kodeblokke, understøtter nu at definere returdata ved hjælp af "OUT"-parametre.
- Tilføjet date_bin-funktion til at runde tidsstempelværdier i henhold til et specificeret interval. SELECT date_bin('15 minutter', TIMESTAMP '2020-02-11 15:44:17', TIMESTAMP '2001-01-01'); 2020-02-11 15:30:00
- Tilføjet SEARCH- og CYCLE-udtryk defineret i SQL-standarden for at gøre det nemmere at bestille og identificere cyklusser i rekursive Common Table Expressions (CTE). MED 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 ) SØG DYBDE FØRST VED id SET ordercol SELECT * FRA search_tree ORDER BY ordercol;
- I psql-værktøjet er autofuldførelsen af kommandoer med faner blevet forbedret, muligheden for at vise funktionsargumenter er blevet tilføjet til kommandoen "\df", og den viste statistik er blevet udvidet til kommandoen "\dX".
- Det er muligt at tildele skrivebeskyttede eller skrivebeskyttede rettigheder til brugere. Privilegier kan indstilles på individuelle tabeller, visninger og skemaer ved hjælp af de foruddefinerede roller pg_read_all_data og pg_write_all_data. GRANT pg_read_all_data TIL bruger1;
- Nye installationer bruger som standard adgangskodegodkendelse ved hjælp af SCRAM-SHA-256 i stedet for md5 (parameteren "password_encryption" ved generering af postgresql.conf er nu sat til 'scram-sha-256').
Kilde: opennet.ru