Po roku vývoja bola vydaná nová stabilná verzia databázového systému PostgreSQL 14. Aktualizácie pre túto novú verziu budú vydávané počas piatich rokov do novembra 2026.
Hlavné novinky:
- Pridaná podpora prístupu k údajom JSON pomocou výrazov, ktoré pripomínajú prácu s poľami: SELECT (‘{ «postgres»: { «release»: 14 }}’::jsonb)[‘postgres’][‘release’]; SELECT * FROM test WHERE details[‘attributes’][‘size’] = ‘»medium»‘;
Podobná syntax je implementovaná aj pre údaje vo formáte kľúč/hodnota, ktoré poskytuje typ hstore. Takáto syntax bola pôvodne realizovaná pomocou univerzálneho rámca, ktorý môže byť v budúcnosti použitý aj pre iné typy. Príklad pre typ hstore: INSERT INTO mytable VALUES (‘a=>b, c=>d’); SELECT h[‘a’] FROM mytable; UPDATE mytable SET h[‘c’] = ‘new’;
- Rodina typov na definovanie rozsahov bola rozšírená o nové typy ‘multirange’, ktoré umožňujú určovať usporiadané zoznamy neprekryvných rozsahov hodnôt. Okrem každého existujúceho range-typu bol navrhnutý jeho multirange-typ, napríklad pre typ ‘int4range’ je zodpovedajúci ‘int4multirange’, a ‘daterange’ zodpovedá ‘datemultirange’. Použitie nových typov zjednodušuje formulovanie dopytov manipulujúcich so zložitými sekvenciami rozsahov. SELECT ‘{[3,7), [8,9)}’::int4multirange; SELECT nummultirange(numrange(1.0, 14.0), numrange(20.0, 25.0));
- Boli vykonané optimalizácie na zvýšenie výkonu vysoce zaťažených systémov, ktoré spracovávajú veľký počet pripojení. V niektorých testoch bol zaznamenaný dvojnásobný nárast výkonu.
- Zvýšila sa efektívnosť práce indexov B-tree a bola vyriešená otázka s rastom indexov pri častých aktualizáciách tabuliek.
- Pridaná podpora pre režim spracovania na strane klienta (realizované na úrovni libpq) pre režim potrubného prenosu (pipeline), ktorý umožňuje významne urýchliť scenáre práce s databázou spojené s vykonávaním veľkého množstva menších operácií zápisu (INSERT/UPDATE/DELETE) tým, že sa pošle ďalší dopyt bez čakania na výsledok predchádzajúceho. Tento režim tiež pomáha urýchliť prácu pri pripojeniach s veľkými oneskoreniami dodania paketov.
- Rozšírili sa možnosti pre distribuované konfigurácie, ktoré zahŕňajú niekoľko serverov PostgreSQL. V implementácii logickej replikácie sa objavila možnosť zasielania transakcií, ktoré sú v procese vykonávania, v prúdovom režime, čo umožňuje výrazne zvýšiť výkon replikácie veľkých transakcií. Navyše bola optimalizovaná logická dekódovanie údajov prichádzajúcich v procese logickej replikácie.
- Vo mechanizme pripojenia externých tabuliek Foreign Data Wrapper (postgres_fdw) bola pridaná podpora paralelného spracovania požiadaviek, ktorá sa zatiaľ uplatňuje len pri pripojení k iným serverom PostgreSQL. Vo postgres_fdw bola tiež pridaná podpora hromadného pridávania údajov do externých tabuliek a možnosť importu sekciovaných tabuliek pomocou príkazu „IMPORT FOREIGN SCHEMA“.
- Boli vykonané optimalizácie v implementácii operácie VACUUM (zber odpadu a balenie diskového úložiska). Bol pridaný núdzový režim čistenia („emergency mode“), ktorý preskakuje nepodstatné čistiace operácie, ak sa vytvárajú podmienky na prechod na druhé kolo identifikátorov transakcií (transaction ID wraparound). Boli znížené náklady pri spracovaní indexov vo formáte B-Tree. Výrazne sa zrýchlila realizácia operácie „ANALYZE“, ktorá zbiera štatistiky o práci databázy.
- Bola pridaná možnosť nastaviť metódu kompresie, ktorá sa používa v systéme TOAST, zodpovedajúcom za uchovávanie veľkých údajov, ako sú bloky textu alebo geometrické informácie. Okrem metódy kompresie pglz možno v TOAST teraz použiť algoritmus LZ4.
- Boli rozšírené prostriedky na monitorovanie činnosti DBMS. Boli pridané zobrazenia na sledovanie pokroku vykonávania príkazov „COPY“ (pg_stat_progress_copy), štatistiky o replikovaných slotov (pg_stat_replication_slots) a aktivity súvisiacej s WAL-logom transakcií (pg_stat_wal). Bola pridaná funkcia compute_query_id, ktorá v rôznych podsystémoch, ako sú pg_stat_activity a EXPLAIN VERBOSE, sleduje požiadavky s priradením unikátneho identifikátora pre každú požiadavku.
- Do plánovača dotazov boli pridané optimalizácie, ktoré zlepšujú paralelnú spracovanie dotazov a umožňujú zlepšiť výkonnosť súbežného vykonávania operácií sekvenčného prehľadávania záznamov, paralelného spúšťania dotazov v PL/pgSQL pomocou príkazu „RETURN QUERY“ a paralelného vykonávania dotazov v „REFRESH MATERIALIZED VIEW“. Pre zvýšenie výkonu cyklických vnorených zlúčení (join) bola implementovaná podpora ďalšieho cacheovania.
- Na optimalizáciu výrazov teraz môže byť použitá rozšírená štatistika a na optimalizáciu oknových funkcií - inkrementálna triedenie.
- Vo uložených procedúrach, ktoré umožňujú spravovanie transakcií v blokoch kódu, bola implementovaná podpora určovania vracaných údajov pomocou parametrov „OUT“.
- Bola pridaná funkcia date_bin na zaokrúhľovanie hodnôt s typom timestamp v súlade so zadaným intervalom. SELECT date_bin(’15 minutes’, TIMESTAMP ‘2020-02-11 15:44:17’, TIMESTAMP ‘2001-01-01’); 2020-02-11 15:30:00
- Boli pridané v štandarde SQL definované výrazy SEARCH a CYCLE, ktoré uľahčujú usporiadanie a zistenie cyklov v rekurzívnych zovšeobecnených tabuľkových výrazoch (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;
- V utilite psql bolo vylepšené automatické dopĺňanie príkazov tabulátorom, pri príkaze „\df“ bola pridaná možnosť zobrazenia argumentov funkcií a pri príkaze „\dX“ bola rozšírená vypúšťaná štatistika.
- Bolo poskytnuté právo prideľovať používateľom privilegá, ktoré povoľujú iba čítanie alebo iba zápis. Privilégia môžu byť určené v súvislosti s jednotlivými tabuľkami, pohľadmi a schémami pomocou preddefinovaných rolí pg_read_all_data a pg_write_all_data. GRANT pg_read_all_data TO user1;
- V nových inštaláciách je predvolene zabezpečené uplatnenie autentifikácie heslom s použitím metódy SCRAM-SHA-256 namiesto md5 (parameter „password_encryption“ pri generovaní postgresql.conf je teraz nastavený na hodnotu ‘scram-sha-256’).
Zdroj: opennet.ru
