Po roce vývoje byla zveřejněna nová stabilní verze databázového systému PostgreSQL 17. Aktualizace pro novou verzi budou vydávány po dobu pěti let až do listopadu 2029. Podpora PostgreSQL 12.x, nejstarší z podporovaných verzí, bude ukončena 14. listopadu.
Hlavní novinky:
- Při provádění operace VACUUM (úklid, čištění a balení diskového úložiště) byla nasazena nová datová struktura, která spotřebovává až 20krát méně paměti. Přechod na novou strukturu umožnil zrychlit provádění operací VACUUM a snížit spotřebu sdílených zdrojů.
- Pokračuje optimalizace výkonu vstupu/výstupu. Díky vylepšení kódu pro zpracování protokolu o zpožděném zápisu WAL bylo možné až dvakrát zvýšit propustnost zapisovacích operací v systémech s vysokým počtem současně prováděných dotazů. Byl navržen nový rozhraní pro streamování vstupu/výstupu, které zlepšilo rychlost sekvenčního procházení dat v tabulkách a urychlilo aktualizaci statistik pro plánovač dotazů po provedení operace ANALYZE.
- Byl zvýšen výkon dotazů s výrazem „IN“, pokud se v nich používají indexy založené na struktuře B-tree. Byla implementována možnost paralelního vytváření indexů BRIN (Block Range Index). V plánovači dotazů byly optimalizovány kontroly „NOT NULL“ a urychlena zpracování obecných tabulkových výrazů (Common Table Expression, CTE) definovaných pomocí SQL příkazu „WITH“. Bylo zajištěno využití vektorových procesorových instrukcí (SIMD) k urychlení některých výpočtů, například pro zrychlení funkce bit_count byly využity instrukce AVX-512.
- Byla implementována podpora nových funkcí pro práci s formátem JSON, definovaných ve standardu SQL/JSON. Byla přidána funkce JSON-TABLE pro převod dat z formátu JSON do běžných tabulek PostgreSQL, stejně jako nové operátory jsonpath pro převod JSON dat na nativní datové typy PostgreSQL. Byly navrženy nové funkce pro vytváření (JSON, JSON_SCALAR a JSON_SERIALIZE) a dotazování (JSON_EXISTS, JSON_QUERY a JSON_VALUE) dat ve formátu JSON.
- Byly rozšířeny možnosti SQL příkazu „MERGE“, který umožňuje vytvářet podmínková SQL výrazy kombinující v jediném výrazu operace INSERT, UPDATE a DELETE. Byla přidána podpora výrazu RETURNING, který umožňuje počítat a vracet hodnoty na základě přidaných, aktualizovaných nebo odstraněných řádků. Byla implementována podpora aktualizace pohledů.
- Byly rozšířeny možnosti nahrávání a exportu dat v dávkovém režimu. V příkazu COPY byla rychlost exportu velkých řádků zvýšena až dvakrát, bylo optimalizováno kopírování při shodě vstupní a cílové kódování, byla přidána možnost ON_ERROR, která umožňuje pokračovat v importu po chybách při vkládání dat.
- Pro segmentované tabulky byla přidána možnost využití sloupců s unikátními identifikátory a podpora techniky optimalizace dotazů „Constraint exclusion“.
- V mechanismu připojení externích tabulek Foreign Data Wrapper (postgres_fdw) byla zrealizována možnost přenosu na externí server poddotazů „EXISTS“ a „IN.
- Byl implementován vestavěný multiplatformní engine pro zpracování vlastností locale „Collation“, který se používá k určení pravidel třídění a metod porovnávání s ohledem na význam symbolů (např. při řazení číselných hodnot se bere v úvahu výskyt minus a tečky před číslem a různé způsoby zápisu, a při porovnávání se nezohledňuje velikost písmen a výskyt diakritiky). Nový engine zaručuje jednotné chování při třídění výsledků dotazů, bez ohledu na to, na jaké platformě je PostgreSQL spuštěn.
- V mechanismu logické replikace, který umožňuje vysílat na jiný server změny provedené v databázi při přidávání, odstraňování nebo aktualizaci záznamů, byl zjednodušen proces aktualizace DBMS. Zatímco dříve byl při přechodu na novou významnou verzi nutný krok odstranit sloty logické replikace a znovu synchronizovat data, nyní lze vynechat jejich odstranění. Pro odolné konfigurace byla zrealizována možnost správy přepnutí na záložní server (failover) pro logickou replikaci. Byla přidána nová utilita pg_createsubscriber pro transformaci fyzické repliky na novou logickou repliku.
- Byla přidána nová možnost „sslnegotiation“ pro přímé vyjednávání zabezpečených TLS spojení s využitím rozšíření TLS ALPN.
- Byla implementována předdefinovaná role pg_maintain, která poskytuje uživateli právo provádět operace související s údržbou DBMS.
- Do nástroje pg_basebackup, používaného pro vytváření záloh databází, byla přidána podpora inkrementálních záloh. Pro rekonstrukci plné zálohy z množiny inkrementálních kopií byla navržena nová utilita pg_combinebackup. Do nástroje pg_dump byla přidána možnost „—filter“ pro výběr objektů zahrnutých do zálohy.
- Při analýze dotazů pomocí SQL příkazu „EXPLAIN“ byla implementována výstupní doba strávená čtením a zápisem lokálních bloků při vstupu/výstupu. Do příkazu „EXPLAIN“ byly také přidány dvě nové možnosti „MEMORY“ a „SERIALIZE“, pomocí kterých lze určit velikost použité paměti a čas strávený na převodu dat pro přenos po síti.
- Byla zajištěna indikace postupu provádění operace VACUUM s indexy.
- Byl přidán systémový pohled pg_wait_events, který v kombinaci s pohledem pg_stat_activity umožňuje podrobněji prozkoumat důvody, proč jsou aktivní relace ve stavu čekání.
Zdroj: opennet.ru
