Uvolnění databázového systému PostgreSQL 18

Po roce vývoje byla vydána nová stabilní verze databázového systému PostgreSQL 18. Aktualizace pro tuto novou verzi budou vydávány po dobu pěti let do listopadu 2030. Podpora PostgreSQL 13.x, nejstarší z podporovaných verzí, bude ukončena 13. listopadu.

Hlavní novinky:

  • Byl přidán subsystém asynchronního vstupu/výstupu, který zvyšuje propustnost vstupu/výstupu a eliminuje zpoždění. Kromě univerzální implementace AIO (io_method=worker), dostupné na všech platformách, která je založena na spuštění několika procesů-zpracovatelů (výchozí hodnotou jsou 3), může být na systému Linux využit rozhraní asynchronního vstupu/výstupu io_uring (io_method=io_uring), podpořený od jádra Linux 5.1. Asynchronní vstup/výstup je prozatím využíván pouze pro urychlení provádění některých operací souvisejících se čtením dat ze souborového systému, jako je sekvenční procházení, skenování bitové mapy indexů a údržba (vacuum). V některých testech aplikace AIO vedla k trojnásobnému zvýšení výkonu. Operace zápisu nadále probíhají synchronně pro splnění požadavků ACID.
  • Byla implementována optimalizace "skip scan" v multikolumnových indexech, která umožňuje využívat index nejen pro kontrolu prvního indexovaného sloupce a plnou vazbu sloupců, ale také pro zpracování jednotlivě ostatních indexovaných sloupců. Například dříve, při vytváření indexu B-tree nad sloupci „(status, date)“, byl index aplikován pouze na dotazy ověřující pole „status“ nebo obě pole „status“ a „date“, zatímco při kontrole pouze pole „date“ se provádělo skenování obsahu tabulky. Režim „skip scan“ umožňuje v určitých situacích skenovat index při dotazu na pouze pole „date“. Režim se používá pouze pro indexy „B-tree“ při použití podmínkového operátoru „=“ na indexovaném poli, v situacích, kdy přeskočené pole má malé množství různých hodnot (například optimalizace bude fungovat, pokud pole status „status“ obsahuje několik fixních hodnot).
  • Byly přidány optimalizace, které efektivněji využívají indexy pro dotazy obsahující konstrukce „OR“ a „IN (…)“ v bloku „WHERE“, a také zvyšují výkon plánování a provádění sloučení tabulek (například byl urychlen kód pro sloučení hashů a povoleno použití inkrementálního třídění při sloučení tabulek).
  • Byla přidána podpora paralelního vytváření indexů GIN (Generalized Inverted Index), které se používají k indexaci složených hodnot, jako jsou pole, a k organizaci vyhledávání v textových datech nebo ve strukturách JSON.
  • Byla přidána možnost vytvářet materializované pohledy a klíče pro partitionování tabulek s indexy označenými jako „unique“, které nevyužívají strukturu B-tree.
  • Byl zvýšen celkový výkon zámků pro dotazy pracující s velkým počtem tabulek, a byly provedeny vylepšení v zpracování dotazů k partitionovaným tabulkám, což urychluje filtrování nepoužívaných sekcí a operace sloučení (JOIN).
  • Byly urychleny operace s textem, jako funkce převodu na velká/malá písmena. Bylo přidáno režim PG_UNICODE_FAST pro zrychlení zohlednění vlastností locale Unicode symbolů.
  • Byla implementována možnost uchovávat statistiku plánovače dotazů po aktualizaci mezi významnými verzemi PostgreSQL. Tato změna umožňuje vyhnout se provádění náročné operace „ANALYZE“ po spuštění nové verze, během níž je pozorován pokles výkonu DBMS.
  • Byl zvýšen výkon utilit pg_upgrade, která se používá k automatizaci přechodu na novou významnou verzi PostgreSQL. Optimalizace jsou obzvláště patrné při aktualizaci databází obsahujících velké množství objektů, jako jsou tabulky a sekvence. Pro zrychlení práce pg_upgrade byl také přidán flag „—jobs N“ pro paralelní kontrolu v N vláknech a flag „—swap“ pro náhradu adresářů s daty bez odkazu, bez klonování a bez kopírování souborů.
  • Byla přidána podpora virtuálních generovaných sloupců, jejichž hodnoty se vypočítávají za běhu během vykonávání dotazů, bez ukládání na disk. Pokud je ve výrazu „CREATE TABLE…“ pro generované sloupce uvedeno pouze klíčové slovo „GENERATED“ bez specifikace typu (STORED nebo VIRTUAL), nový variant se použije jako výchozí místo staré implementace. V staré implementaci byly hodnoty generovány v průběhu operací „INSERT“ nebo „UPDATE“ a ukládány na disk k dalšímu použití. Nevýhodou virtuálních generovaných sloupců je nemožnost jejich použití v indexech, ale jejich výhodou je možnost provádět normalizaci a změnu dat za běhu (což je relevantní při práci s daty JSON). Co se týče klasických uložených generovaných sloupců, v nové verzi byla zajištěna podpora logické replikace.
  • V příkazech INSERT, UPDATE, DELETE a MERGE byla implementována možnost výstupu minulých (OLD) a aktuálních (CURRENT) hodnot ve výrazu RETURNING. Například: „UPDATE… RETURNING WITH (OLD AS o, NEW AS n) o.*, n.*.“.
  • Byla přidána funkce uuidv7() pro generování náhodných unikátních identifikátorů ve formátu UUIDv7. Na rozdíl od staré funkce pro generaci UUID (gen_random_uuid), která je nyní navíc dostupná pod názvem uuidv4(), zahrnuje UUIDv7 kromě náhodné hodnoty i čas generace. Přítomnost seřazených částí ve hodnotě UUID (prvních 12 znaků – epochální čas, a následujících 18 – náhodná hodnota) zvyšuje efektivitu třídění a indexování, což je důležité, protože UUID se obvykle používají pro primární klíče (například klíče vytvořené v blízkém čase se umísťují vedle sebe v indexu).
  • V operaci „LIKE“ byla implementována podpora porovnání s textem, ve kterém se používají nedeterministické vlastnosti lokalizace „collation“, které umožňují provádět porovnání s ohledem na význam symbolů (například při porovnání se nemusí brát v úvahu diakritika). Byla přidána funkce CASEFOLD pro změnu velikosti písmen s ohledem na vlastnosti lokalizace „collation“ (například některé symboly mají více než dvě varianty malých písmen nebo při porovnání vyžadují převedení na velká písmena, nikoli na malá).
  • Byla přidána možnost použití časových omezení (temporal constraint). U hodnot "PRIMARY KEY" a "UNIQUE" pro přidání časových omezení je třeba použít výraz "WITHOUT OVERLAPS", a u hodnoty "FOREIGN KEY" - výraz PERIOD. Například při definování primárních klíčů lze omezit klíče s překrývajícími se časovými intervaly.
  • Byl přidán příkaz "CREATE FOREIGN TABLE … LIKE command" pro vytvoření schématu externí tabulky na základě definice lokální tabulky.
  • Byla přidána podpora připojení k databázovému systému pomocí OAUTH 2.0 ověřování s použitím přístupového tokenu místo hesla. Použití OAUTH umožňuje neuchovávat hesla v DB, identifikovat uživatele prostřednictvím externích služeb a využívat funkce jako dvoufaktorová autentizace a jednotný bod přístupu (SSO).
  • Byla přidána funkce ssl_tls13_ciphers(), pomocí které lze určit seznam povolených šifrovacích algoritmů při připojení pomocí protokolu TLSv1.3.
  • Podpora autentizace s použitím algoritmu md5 pro hashování hesel byla přeřazena mezi zastaralé a plánované k odstranění. Místo md5 se doporučuje použít algoritmus SCRAM (SCRAM-SHA-256), který byl zaveden v PostgreSQL 10. Dále je realizována podpora předávání autentizace na základě SCRAM při připojení přes postgres_fdw a dblink k externím serverům PostgreSQL.
  • Při provádění operace "EXPLAIN ANALYZE" je zajištěn výstup informací o počtu vyhledávacích operací v indexech při skenování indexu a počtu přístupů do vyrovnávacích pamětí při provádění dotazu. Do výstupu "EXPLAIN ANALYZE VERBOSE" byla přidána statistika o CPU, WAL žurnálu a intenzitě čtecích operací. Do tabulky pg_stat_all_tables byly přidány informace o čase stráveném operací VACUUM a analýzou tabulek. Byla poskytnuta statistika o intenzitě vstupu/výstupu a zatížení WAL žurnálu v rámci jednotlivých připojení. Do pg_stat_subscription_stats a do logů byly přidány informace s diagnostikou konfliktů při provádění operací zápisu během logické replikace.
  • V nových instalacích je standardně zapnuto používání kontrolních součtů pro ověřování integrity uložených dat. Pro zrušení tohoto chování při spuštění initdb je třeba uvést volbu "—no-data-checksums".
  • Do utilitě pg_createsubscriber byl přidán příznak "—all" pro vytvoření logických replik jedním příkazem najednou pro všechny databáze.
  • Byla implementována nová verze (3.2) protokolu používaného pro interakci externích utilit s databázovými systémy a implementovaného v knihovně libpq. Poslední aktualizace protokolu byla provedena v PostgreSQL 7.4 (2003). V knihovně libpq se ve výchozím nastavení i nadále používá verze 3.0.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster