Po roce vývoje byla vydána nová stabilní verze databázového systému PostgreSQL 17. Aktualizace pro tuto novou verzi budou vycházet po dobu pěti let 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 použita nová datová struktura, která spotřebovává až 20krát méně paměti. Přechod na tuto novou strukturu umožnil zrychlit provádění operací VACUUM a snížit spotřebu sdílených zdrojů.
- Pokračuje optimalizace výkonnosti vstupu/výstupu. Díky vylepšení kódu pro zpracování logu odloženého zápisu WAL se podařilo až dvakrát zvýšit propustnost zápisových operací ve systémech s velkým počtem současně vykonávaných dotazů. Byl navržen nový rozhraní pro streamování vstupu/výstupu, které zvýšilo rychlost sekvenčního procházení dat v tabulkách a urychlilo aktualizaci statistik pro plánovač dotazů po provedení operace ANALYZE.
- Byla zlepšena výkonnost dotazů s výrazem „IN“, pokud v nich jsou využívány indexy na bázi struktury 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 zrychlena zpracování společných tabulkových výrazů (Common Table Expression, CTE) definovaných pomocí SQL příkazu „WITH“. Byla zajištěna podpora vectorových procesorových instrukcí (SIMD) pro urychlení některých výpočtů, například pro urychlení funkce bit_count byly využity instrukce AVX-512.
- Byla realizová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 na běžné tabulky PostgreSQL a také nové operátory jsonpath pro převod dat JSON 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.
- Možnosti SQL příkazu „MERGE“ byly rozšířeny tak, aby umožnily vytváření podmínkových SQL výrazů, které kombinují operace INSERT, UPDATE a DELETE v jednom výrazu. Byla přidána podpora pro výraz RETURNING, který umožňuje vypočítávat a vracet hodnoty na základě přidaných, aktualizovaných nebo smazaných řádků. Byla implementována podpora pro aktualizaci pohledů.
- Možnosti hromadného načítání a exportu dat byly rozšířeny. Rychlost exportu velkých řádků v příkazu COPY se zvýšila až dvakrát, optimalizováno je kopírování při shodě vstupní a cílové kódování, byla přidána volba ON_ERROR, která umožňuje pokračovat v importu po chybách při vkládání dat.
- Pro partitionované tabulky byla přidána možnost použ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 implementována možnost předávání na externí server subdotazů „EXISTS“ a „IN.
- Byl implementován integrovaný platformově nezávislý engine pro zpracování vlastností místního nastavení „Collation“, který se používá k určení pravidel řazení a metod porovnávání s ohledem na význam znaků (například při řazení číselných hodnot se zohledňuje přítomnost minus a tečky před číslem a různé způsoby zápisu, zatímco při porovnávání se ignoruje velikost písmen a přítomnost akcentu). Nový engine zaručuje jednotné chování při řazení výsledků dotazů, které nezávisí na tom, na jaké platformě je PostgreSQL spuštěno.
- V mechanismu logické replikace, který umožňuje přenášet změny provedené v databázi na jiný server během přidávání, odstraňování nebo aktualizace záznamů, byl zjednodušen proces aktualizace DBMS. Pokud dříve při přechodu na novou významnou verzi bylo nutné odstranit sloty logické replikace a znovu synchronizovat data, nyní je možné se obejít bez odstraňování slotů. Pro vysoce dostupné konfigurace byla implementována možnost řízení přepínání na záložní server (failover) pro logickou replikaci. Byla přidána nová utilita pg_createsubscriber pro převod fyzické repliky na novou logickou replikaci.
- Byla přidána nová možnost „sslnegotiation“ pro přímou dohodu o zabezpečených TLS připojeních s využitím rozšíření TLS ALPN.
- Byla implementována předdefinovaná role pg_maintain, která uživateli uděluje právo provádět operace spojené s údržbou DBMS.
- Do utilitě pg_basebackup, určené k vytváření záloh databází, byla přidána podpora pro inkrementální zálohy. Pro rekonstrukci plné zálohy z množiny inkrementálních kopií byla navržena nová utilita pg_combinebackup. Do utility 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“ byl implementován výstup času stráveného č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“, které umožňují určit velikost využité paměti a čas strávený transformací dat pro jejich přenos po síti.
- Byla zajištěna indikace postupu provádění operace VACUUM s indexy.
- Bylo přidáno systémové zobrazení pg_wait_events, které v kombinaci se zobrazením pg_stat_activity umožňuje podrobněji prozkoumat důvody, proč jsou aktivní relace ve stavu čekání.
Zdroj: opennet.ru
