Po roce vývoje nová stabilní větev databázového systému PostgreSQL 12. Aktualizace pro novou větev v průběhu pěti let do listopadu 2024.
Hlavní :
- Byla přidána podpora „“, jejichž hodnota se vypočítává na základě výrazu, který pokrývá hodnoty jiných sloupců ve stejné tabulce (analog pohledů, ale pro jednotlivé sloupce). Generované sloupce mohou být dvou typů — uložené a virtuální. V prvním případě se hodnota vypočítává při přidávání nebo změně dat, zatímco ve druhém — při každém čtení na základě aktuálního stavu jiných sloupců. V současné době PostgreSQL podporuje pouze uložené generované sloupce;
- Byla přidána možnost vykonávání dotazů na data z JSON dokumentů pomocí , připomínající a definovaných ve standardu SQL/JSON. Pro zvýšení efektivity zpracování takových výrazů pro dokumenty uložené ve formátu JSONB se používají stávající mechanizmy indexování;
- Standardně je povoleno použití JIT kompilátoru (Just-in-Time) na základě vývoje LLVM pro urychlení vykonávání některých výrazů během zpracování SQL dotazu. Například, JIT se uplatňuje pro urychlení vykonávání výrazů uvnitř bloků „WHERE“, ve výstupních seznamech (target lists), agregačních výrazech a některých vnitřních operacích;
- Výrazně byla zvýšena výkonnost indexování. Indexy B-tree byly optimalizovány pro práci v podmínkách častých změn indexů — v testech TPC-C došlo k celkovému zvýšení výkonnosti a snížení spotřeby diskového prostoru v průměru o 40%. Byly sníženy provozní náklady při generování protokolu předběžného zápisu (WAL) pro typy indexů GiST, GIN a SP-GiST. Pro GiST byla přidána možnost vytváření obalových indexů (přes výraz INCLUDE), které zahrnují další sloupce. V operaci byla zajištěna podpora statistiky o nejběžnějších hodnotách (MCV), která umožňuje generovat optimálnější plány dotazů při využití nerovnoměrně rozložených sloupců;
- Implementace partitioningu je optimalizována pro dotazy pokrývající tabulky se tisíci sekcemi, které však omezují výběr na úzký podmnožin dat. Byla zvýšena výkonnost přidávání dat do sekcionovaných tabulek pomocí operací INSERT a COPY, stejně jako byla zajištěna možnost přidávat nové sekce prostřednictvím „ALTER TABLE ATTACH PARTITION“ bez blokování vykonávání dotazů;
- Byla přidána podpora automatického inline rozvinutí obecné tabulkové výrazy (, CTE), které umožňují používat dočasné pojmenované souborové sestavy určené pomocí klauzule WITH. Inline rozvinutí zvyšuje výkon většiny dotazů, ale zatím se používá pouze pro nerekurzivní CTE;
- Byla přidána podpora vlastností locale „Collation“, které umožňují stanovit pravidla pro třídění a metody porovnávání s ohledem na význam znaků (například při třídění číselných hodnot se zohledňuje přítomnost minusové a tečkové hodnoty před číslem a různé způsoby zápisu, zatímco při porovnávání se nezohledňuje velikost písmen a přítomnost diakritiky);
- Byla přidána podpora vícefaktorové autentizace klienta, při které je v pg_hba.conf možné zkombinovat autentizaci pomocí SSL certifikátu (clientcert=verify-full) s dodatečnou metodou autentizace, jako je scram-sha-256;
- Byla přidána podpora šifrování komunikačního kanálu při autentizaci přes , jak na straně klienta, tak na straně serveru;
- Byla přidána podpora pro definování LDAP serverů na základě záznamů „DNS SRV“, pokud je PostgreSQL zkompilováno s OpenLDAP;
- Byla přidána operace „“ pro rekonstrukci indexů bez blokování operací zápisu do indexu;
- Byl přidán příkaz , který umožňuje pro existující databázi zapnout a vypnout kontrolu kontrolních součtů datových stránek (dříve byla tato operace podporována pouze během inicializace databáze);
- Bylo zajištěno zobrazení indikátoru pokroku během operací CREATE INDEX, REINDEX, CLUSTER, VACUUM FULL a pg_checksums;
- Byl přidán příkaz „“ pro připojení zpracovatelů nových metod ukládání tabulek optimalizovaných pro různé specifické úkoly. V současnosti je jedinou integrovanou metodou přístupu k tabulkám „heap“;
- Konfigurační soubor recovery.conf byl sloučen s postgresql.conf. Jako indikátory přechodu do stavu obnovení po selhání nyní se používají soubory recovery.signal a standby.signal.
Zdroj: opennet.ru
