Nova različica podatkovne baze PostgreSQL 9.5 prinaša obilico novosti

Gašper Žejn

9. jan 2016 ob 11:29:07

V čertrek je izšla nova različica strežnika za upravljanje s podatkovnimi bazami PostgreSQL, ki prinaša kar nekaj zanimivih novosti.

Dlje časa pogrešana funkcija v PostgreSQL je bil "UPSERT" (skrajšano za "INSERT, ON CONFLICT UPDATE"), ki omogoča, da aplikacija z istim SQL stavkom obravnava nove in obstoječe zapise. To precej poenostavi logiko same aplikacije, saj je preverjanje konfliktne situacije izvedeno v podatkovni bazi, tako da se zagotovi atomičnost spremembe. Uporabniki MySQL to poznajo kot INSERT ON DUPLICATE KEY UPDATE.

Z različico 9.5 je podpora za JSON nadgrajena, da je sedaj možno podatke v JSONB poljih spreminjati s funkcijami v podatkovni bazi - dodajati, nastaviti in brisati elemente znotraj JSON objektov, tako da ni več potrebno JSON objekta spreminjati v zunanji aplikaciji. Dobrodošla je tudi funkcija json_pretty, ki JSON objekt izpiše na bolj čitljiv način.

Pomembna novost je možnost kontrole dostopa do podatkov na nivoju vrstic in stolpcev (t.i. row level security), ki omogoča omejitve posameznim uporabnikom, da lahko dostopajo zgolj do določenih vrstic oz. polj zapisov. To je uporabna lastnost, ko ima sistem opravka z občutljivimi podatki, npr. v zdravstvu.

PostgreSQL je dobil tudi nov način indeksiranja BRIN, kar je okrajšava za block range index. BRIN indeks povzame več podatkovnih blokov tabele v minimalno in maksimalno vrednost, tako da je zelo kompakten, za občutek: indeks nad 650 MB podatkov ima le 64KB. To pride posebej prav pri zelo velikih tabelah, pri katerih bi bil običajni btree indeks preobsežen, BRIN pa kljub velikemu obsegu podatkov še vedno omogoči učinkovit dostop do želenih zapisov. BRIN indeksi so zaradi načina delovanja posebej primerni za stolpce, katerih vrednost injektivno narašča ali pada oz. kjer obstaja nek z ozirom na dodajanje zapisov v tabelo "naraven" red.

PostgreSQL po novem z uporabo t.i. okrajšanih ključev (abbreviated keys) hitreje sortira vrednosti tipa text in numeric. Namesto primerjanja celotnega besedila se tako primerja le prvih nekaj znakov, kar operacijo precej pospeši. To je pomembno, ker se sortiranje veliko uporablja, tudi npr. pri izdelavi indeksov in agregaciji. Ena primerjava kaže, da izgradnja indeksa nad tekstovnim poljem v tabeli z 18 milijoni vrstic z različico 9.4 traja 10 minut in 19 sekund, z 9.5 pa samo 51 sekund, kar je kar 12-krat hitreje. Tipična pohitritev je nekje okrog 3-krat.

Za povezovanje na zunanje baze so na voljo t.i. foreign data wrappers, ki po novem omogočajo enostavnejši uvoz kar vseh v povezanem sistemu vidnih tabel z uporabo IMPORT FOREIGN SCHEMA. Po novem so lahko zunanje tabele vključene tudi v dedovanje. Nova pa je tudi podpora za izvajanje JOIN operacij na povezanem sistemu, kar lahko naredi poizvedbe učinkovitejše.

Analitikom bodo prav prišli novi SQL ukazi CUBE, ROLLUP in GROUPING SETS, ki omogočajo naprednejše grupiranje podatkov tudi po več dimenzijah hkrati z enim prehodom čez podatke in tako omogočajo učinkovitejšo izdelavo OLAP kock. Za vzorčenje tabel je na voljo nov ukaz TABLESAMPLE, ki omogoča, da analitik zajame le določen odstotek vseh vrstic, ter pri razvoju hitreje preiskuša svoje ideje.

Administratorji se bodo razveselili orodja pg_rewind, ki omogoča, da pri uporabi replikacije po menjavi primarnega strežnika stari primarni strežnik hitreje privedejo v vlogo sekundarnega, brez da bi ga morali obnoviti iz rezervne kopije.

Še nekatere omembe vredne novosti so:


PostgreSQL se z novostmi s podporo JSONB in UPSERT širi v NoSQL sfere, hkrati pa ima različica 9.5 veliko dobrodošlih novosti za podporo analitiki: BRIN indekse, dodatne načine grupiranja ter vzorčenje podatkov. Večje novosti so s primeri opisane tudi na PostgreSQL wikiju.

Razširljivost in prilagodljivost PostgreSQL je prepoznal celo MongoDB, Inc., ki je v MongoDB 3.2 pod imenom BI Connector vključil PostgreSQL, da z njim analitičnim orodjem, ki pričakujejo SQL, omogočajo dostop do podatkov.