Pojďme se podívat na novinky v databázovém systému PostgreSQL 9.3, který do čerstvé verze Fedory proklouzl těsně před vydáním. Postgre 9.3 slibuje vyšší výkon, materializované pohledy, nové možnosti pro psaní pluginů a psaní SQL dotazů a další.

Novinky v definici dat

Jednou z největších novinek je zavedení materializovaných pohledů, což prakticky znamená, že místo klasického pohledu PostgreSQL vytvoří novou regulérní tabulku. Nad materializovaným pohledem potom můžeme vytvářet i indexy, nicméně po aktualizaci pohledu musíme explicitně volat příkaz REFRESH.

Automaticky aktualizovatelné pohledy sice už šly tak trochu nahackovat v dřívějších verzích Postgresu, nyní ale máme některé pohledy aktualizovatelné automaticky; takové pohledy ovšem musí splňovat několik základních předpokladů. Konkrétně musí být vytvořené nad jednou tabulkou v klauzuli FROM a relace nesmí být modifikovaná funkcemi jako DISTINCT, UNION apod. Na aktualizaci složitějších pohledů lze použít triggery INSTEAD OF nebo INSTEAD.

Event triggery umožňují nově definovat spuštění triggeru jako reakci na nějaký příkaz pro definici dat (DDL), například pro příkazy jako CREATE table. Typicky se k takovým triggerům můžeme uchýlit při potřebě složitějších nastavení, které nelze provést výchozím nastavením (např. při práci s uživateli, jejich právy apod).

Nový příkaz COPY použijete pro rychlý import/export dat do/z databáze, kde na druhé straně stojí soubor, nebo dokonce jiný program (možnost použít PIPE COPY). Další modifikací příkazu COPY je FREEZE, což znamená, že navždy konstantní záznamy jsou při kopírování zmrazeny a není posléze potřeba volat relativně náročný VACUUM FREEZE.

Výkon nezůstává beze změny

Od verze 9.3 můžeme používat indexy GiST pro tabulky, jejichž data nejsou persistentní při havárii, neboť nepoužívají transakční log, tzv. unlogged tables. Mimo to i indexy pro regulární výrazy budou jistě přínosem pro výkon mnoha serverů.

Zlepšení rychlosti se dočkáme i v dalších ohledech, mj. např. u numerických operací, paralelního pg_dump, nového datového typu Range (představeného v 9.2), u kterého se PostgreSQL nově snaží zlepšit jejich efektivitu pomocí histogramů, a stejný datový typ můžeme urychlit použitím indexů SP-GiST, což dříve nebylo možné.

Zlepšit výkon může nově i mmap použitý pro práci se sdílenou pamětí a od verze 9.3 mohou být large objects velké až 4 TB, do teď to mohlo být maximálně 2 GB. Vylepšeny byly i zámky a jejich trvání je dokonce možné omezit.

Nově můžeme také zapnout kontrolní součty u datových stránek, které mohou mít opodstatnění pro paranoidní aplikace; nejen pro ně také můžeme využít nový způsob vypisování chybových hlášek, které lze nyní lépe parsovat díky položkám SCHEMA NAME, TABLE NAME, CONSTRAINT NAME nebo LOCATION.

Něco pro pisatele pluginů

FWD aneb Foreigh Data Wrappers přidávají možnost pracovat z prostředí Postgresu s jinými zdroji dat, a to nejen s jinými databázemi PostgreSQL. Můžeme tak sosat data i z jiných databázových systémů nebo v podstatě jakéhokoliv zdroje. Díky API si totiž můžeme napsat FWD téměř pro cokoliv. Wrapper může dovolit čtení nebo čtení se zápisem dohromady. Záleží vždy na konkrétní technologii, co všechno nám dovolí.

Nová verze přináší ještě druhé API, které umožňuje naprogramovat si vlastní proces bežící v rámci background procesů PostgreSQL, tzv. background worker process. Co nám toto nové API nabídne v praxi, uvidíme možná až časem, protože pluginy zatím neexistují, nicméně máme k dispozici vzrušující nástroj pro modulární rozšíření Postrgresu novým směrem.

Novou možnost pracovat s PostgreSQL nabízí také pg_xlogdump, který jednoduše vypisuje transakční log ve formátu vhodném pro další zpracování. Co s tím kdo v praxi udělá, záleží jen na jeho představivosti.

Možnosti při psaní SQL dotazů

Nově představenou klauzuli LATERAL, která má co do činění s efektivnějším spojováním tabulek, zajímavě a na praktickém příkladě popsal Pavel Stěhule v článku na root.cz.

První kroky k podpoře datového typu JSON byly představeny již v předchozí verzi, nicméně až nyní se PostgreSQL dostává do stavu, kdy lze s tímto typem plnohodnotně pracovat. Nová verze přidává možnosti agregace, konečně lze JSON hodnoty parsovat, tedy číst datové složky odděleně apod. JSON může být také nově převeden na typ záznam a naopak mnoho základních typů může být převedeno na typ JSON. Pro práci s poli můžeme využít nové funkce array_remove a array_replace.

A ještě pár bonusů navrch

Replikace nabízí nové možnosti po ztrátě master serveru, a to vytvoření nového master serveru z jednoho ze zbylých slave serverů. Dříve se všechny nové slave servery musely vytvořit znovu. Opět se jedná o krok blíže cloudově orientovanému pohledu na software, kde automatické zotavení po pádu hraje velkou roli.

Nejen při bootu systému pomocí systemd, kdy se služby spouští pokud možno paralelně a musíme tím pádem přesně vědět, kdy již je jedna služba k dispozici, využijeme novou jednoduchou binárku pg_isready, která podle názvu jednoduše slouží k určení časového okamžiku, kdy už je databázový server schopný přijímat zprávy. Novinkou v konzolovém psql jsou potom příkazy \gset a \watch.

Ne že by tohle byl kompletní výpis novinek v PostgreSQL 9.3, ale i tak toho není málo, co říkáte?