PostgreSQL izstrādes grupa 16. jūlijā publicēja PostgreSQL 19 otro beta versiju. Divas lietas šajā laidienā izceļas pāri pārējām: datubāze tagad prot atbildēt uz grafu vaicājumiem tieši SQL valodā un spēj pārbūvēt tabulu, to nebloķējot. Abām šīm vajadzībām līdz šim vajadzēja ārējus paplašinājumus vai atsevišķas grafu datubāzes.
Stabilā 19. versija gaidāma septembrī vai oktobrī. Beta 2 pati galvenokārt labo iepriekšējās beta kļūdas. Jaunās funkcijas tomēr jau darbojas un pēc tām var spriest, ar ko 19. versija atšķirsies no pērn rudenī izlaistās 18. versijas.
Grafu vaicājumi bez atsevišķa dzinēja
Lielākais jaunums ir SQL/PGQ atbalsts. Šī ir daļa no SQL:2023 standarta un ļauj datubāzē aprakstīt tā saukto īpašību grafu (property graph) virs jau esošām tabulām. Pēc tam pa šo grafu var meklēt saiknes ar MATCH sintaksi, līdzīgi kā to dara specializētas grafu datubāzes Neo4j vai TigerGraph.
Praksē tas nozīmē, ka klientu, pasūtījumu un preču sasaisti vairs nav jāmeklē ar garām vairāku līmeņu JOIN rindām. Grafs tabulas sasaista vienreiz un vaicājums apraksta ceļu pa tām. Datubāze aiz kulisēm to pārtulko atpakaļ parastā vaicājumā, tāpēc dati paliek tajās pašās tabulās un nekas nav jādublē atsevišķā glabātuvē.
Kā izskatās grafa apraksts
Grafu definē ar komandu CREATE PROPERTY GRAPH. Tajā norāda, kuras tabulas ir mezgli (vertex) un kuras ir saiknes (edge) starp tiem:
CREATE PROPERTY GRAPH myshop
VERTEX TABLES (
products LABEL product,
customers LABEL customer,
orders LABEL "order"
)
EDGE TABLES (
customer_orders SOURCE customers DESTINATION orders LABEL has_placed
);
Pēc tam meklēšana notiek ar funkciju GRAPH_TABLE. Šis vaicājums atrod visus klientus, kas šodien veikuši pasūtījumu:
SELECT customer_name
FROM GRAPH_TABLE (
myshop
MATCH (c IS customer)-[IS has_placed]->(o IS "order"
WHERE o.ordered_when = current_date)
COLUMNS (c.name AS customer_name)
);
Zīme -[IS has_placed]-> apzīmē virzienu no klienta uz pasūtījumu. Sintakse ir standarta, tāpēc tos pašus vaicājumus vēlāk vajadzētu varēt pārnest uz citām datubāzēm, kas ievieš SQL/PGQ.
Grafa apraksts tabulas sasaista vienreiz. Vaicājumam vairs nav jāzina, cik JOIN līmeņu vajag, lai no klienta nokļūtu līdz precei.
REPACK pārbūvē tabulu bez bloķēšanas
Otrs praktiskais jaunums ir komanda REPACK ar iespēju CONCURRENTLY. Tā no jauna sakārto tabulas fizisko izkārtojumu diskā un atbrīvo vietu, ko atstājuši dzēstie ieraksti. Atšķirībā no vecās VACUUM FULL, kas uz visu darbības laiku bloķē tabulu, REPACK ar CONCURRENTLY ļauj tabulu tikmēr lasīt un tajā rakstīt.
REPACK TABLE orders CONCURRENTLY;
Līdz šim šo darbu darīja ārējais paplašinājums pg_repack, kas jāuzstāda un jāuztur atsevišķi. Tagad tā pati funkcionalitāte ir iebūvēta pašā datubāzē. Lielās tabulās tas noņem vienu no biežākajiem iemesliem plānotai dīkstāvei, jo VACUUM FULL bloķēšana uz aizņemta servera varēja ilgt minūtes vai pat stundas.
Asinhronais I/O pats pielāgo darbiniekus
PostgreSQL 18 pagājušajā rudenī ieviesa asinhrono I/O apakšsistēmu. 19. versija to attīsta tālāk. Ja iestatīts io_method=worker, datubāze tagad pati palielina vai samazina I/O darbinieku skaitu atkarībā no slodzes. Robežas nosaka jauni parametri io_min_workers un io_max_workers.
Komanda EXPLAIN ANALYZE ieguvusi iespēju IO, kas parāda, cik daudz asinhronā I/O konkrētais vaicājums izmantoja. Tas palīdz saprast, vai lēnums nāk no diska vai no paša vaicājuma plāna.
Ko vēl ienes 19. versija
Papildus lielajām funkcijām beta versijā ir vairāki mazāki uzlabojumi:
- loģisko replikāciju var ieslēgt bez servera pārstartēšanas un tā tagad replicē arī secību (sequence) vērtības;
- ievietošana tabulā ar ārējās atslēgas pārbaudi darbojas aptuveni divreiz ātrāk;
- autovakuums var strādāt paralēli, izmantojot vairākus darbiniekus;
- datu kontrolsummas var ieslēgt vai izslēgt servera darbības laikā, to neapstādinot.
Snowflake inženieru bloga apskatā par galveno praktisko ieguvumu uzskata tieši REPACK CONCURRENTLY, jo lielās produkcijas tabulās tas ietaupa tieši to laiku, kas agrāk aizgāja dīkstāvē.
Katrs, kam ir PostgreSQL serveris, beta versiju var uzstādīt blakus esošajai instalācijai un pārbaudīt savus vaicājumus jau tagad. Izstrādes grupa aicina ziņot par kļūdām, jo tieši beta posmā tās vēl paspēj izlabot pirms septembra laidiena.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.