Po roce vývoje byla zveřejněna nová stabilní verze databázového systému PostgreSQL 14. Aktualizace pro tuto novou verzi budou vycházet po dobu pěti let do listopadu 2026.
Hlavní novinky:
- Byla přidána podpora pro přístup k datům JSON pomocí výrazů, které připomínají práci s poli: SELECT (‘{ "postgres": { "release": 14 }}’::jsonb)[‘postgres’][‘release’]; SELECT * FROM test WHERE details[‘attributes’][‘size’] = ‘"medium"‘;
Podobná syntaxe byla implementována i pro data ve formátu klíč/hodnota, která poskytuje typ hstore. Tato syntaxe byla původně implementována pomocí univerzálního rámce, který může být v budoucnu využit i pro další typy. Příklad pro typ hstore: INSERT INTO mytable VALUES (‘a=>b, c=>d’); SELECT h[‘a’] FROM mytable; UPDATE mytable SET h[‘c’] = ‘new’;
- Rodina typů pro určení rozsahů byla rozšířena o nové typy „multirange“, které umožňují zadávat seřazené seznamy nepřekrývajících se rozsahů hodnot. K každému existujícímu rozsahovému typu byl nabídnut jeho multirange typ, například pro typ „int4range“ odpovídá „int4multirange“, a „daterange“ — „datemultirange“. Použití nových typů usnadňuje formulaci dotazů manipulujících se složitými sekvencemi rozsahů. SELECT ‘{[3,7), [8,9)}’::int4multirange; SELECT nummultirange(numrange(1.0, 14.0), numrange(20.0, 25.0));
- Byly provedeny optimalizace pro zvýšení výkonu vysoce zatížených systémů zpracovávajících velké množství spojení. V některých testech byl zaznamenán dvojnásobný nárůst výkonu.
- Byla zvýšena účinnost provozu indexů B-tree a vyřešen problém s růstem indexů při častém aktualizování tabulek.
- Byla přidána podpora pro klientskou režii (implementováno na úrovni libpq) pro režim kontejnerového (pipeline) přenosu dotazů, což umožňuje výrazně urychlit scénáře práce s databází spojené s vykonáváním velkého množství drobných operací zápisu (INSERT/UPDATE/DELETE) tím, že se následující dotaz odešle, aniž by se čekalo na výsledek předchozího. Tento režim také pomáhá urychlit operace při připojeních s vysokými latencemi doručení paketů.
- Byly rozšířeny možnosti pro distribuované konfigurace zahrnující více servery PostgreSQL. V implementaci logické replikace byla přidána možnost odesílání v reálném čase transakcí, které jsou v procesu vykonávání, což výrazně zvyšuje výkon replikace velkých transakcí. Kromě toho bylo optimalizováno logické dekódování dat přicházejících během logické replikace.
- Do mechanismu připojení externích tabulek Foreign Data Wrapper (postgres_fdw) byla přidána podpora paralelního zpracování dotazů, která je zatím použitelná pouze při připojení k jiným serverům PostgreSQL. V postgres_fdw byla také přidána podpora pro hromadné přidávání dat do externích tabulek a možnost importu sektorizovaných tabulek pomocí direktivy „IMPORT FOREIGN SCHEMA“.
- Byly provedeny optimalizace v implementaci operace VACUUM (úklid a balení diskového úložiště). Bylo přidáno nouzové režim čištění („emergency mode“), který vynechává nedůležité úklidové operace, pokud vznikají podmínky k přechodu na druhé kolo identifikátorů transakcí (transaction ID wraparound). Náklady při zpracování indexů ve formátu B-Tree byly značně sníženy. Výkon operace „ANALYZE“, která shromažďuje statistiky o činnosti DB, byl výrazně urychlen.
- Byla přidána možnost nastavení metody komprese používané v systému TOAST, který se stará o ukládání velkých dat, jako jsou bloky textu nebo geometrické informace. Kromě metody komprese pglz je nyní v TOAST možné použít algoritmus LZ4.
- Byly rozšířeny prostředky pro sledování činnosti DBMS. Byly přidány pohledy pro sledování pokroku vykonávání příkazů „COPY“ (pg_stat_progress_copy), statistiky o replikací (pg_stat_replication_slots) a činnosti související s WAL-logem transakcí (pg_stat_wal). Byla přidána funkce compute_query_id, která zahrnuje v různých subsystémech, jako jsou pg_stat_activity a EXPLAIN VERBOSE, sledování dotazů s přidělením jedinečného identifikátoru pro každý dotaz.
- Do plánovače dotazů byly přidány optimalizace, které zlepšují paralelní zpracování dotazů a umožňují zvýšit výkon současného provádění operací sekvenčního skenování záznamů, paralelního spouštění dotazů v PL/pgSQL pomocí příkazu „RETURN QUERY“ a paralelního provádění dotazů v „REFRESH MATERIALIZED VIEW“. Pro zvýšení výkonu cyklických vnořených spojení (join) byla implementována podpora dodatečného cachování.
- Pro optimalizaci výrazů nyní může být použita rozšířená statistika, a pro optimalizaci okna funkcí — inkrementální třídění.
- Ve uložených procedurách, které umožňují spravovat transakce v blocích kódu, byla implementována podpora určování vracených dat pomocí parametrů „OUT“.
- Byla přidána funkce date_bin pro zaokrouhlování hodnot typu timestamp podle zadaného intervalu. SELECT date_bin(’15 minutes’, TIMESTAMP ‘2020-02-11 15:44:17’, TIMESTAMP ‘2001-01-01’); 2020-02-11 15:30:00
- Byly přidány výrazy SEARCH a CYCLE definované ve standardu SQL, které zjednodušují řazení a identifikaci cyklů v rekurzivních obecných tabulkových výrazech (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 užitečném programu psql bylo vylepšeno automatické doplňování příkazů tabulátorem, v příkazu „\df“ byla přidána možnost zobrazení argumentů funkcí a v příkazu „\dX“ byla rozšířena výstupní statistika.
- Byla poskytnuta možnost přidělovat uživatelům oprávnění, která umožňují pouze čtení nebo pouze zápis. Oprávnění mohou být nastavena vázaná na jednotlivé tabulky, pohledy a schémata pomocí předdefinovaných rolí pg_read_all_data a pg_write_all_data. GRANT pg_read_all_data TO user1;
- V nových instalacích se jako výchozí používá ověřování pomocí hesla s metodou SCRAM-SHA-256 místo md5 (parametr „password_encryption“ při generování postgresql.conf je nyní nastaven na hodnotu ‘scram-sha-256’).
Zdroj: opennet.ru
