PÀrast aasta arendust on avaldatud uus stabiilne PostgreSQL 18 andmebaasi versioon. Uuendusi uue versiooni jaoks ilmub viie aasta jooksul kuni novembri 2030. aastani. PostgreSQL 13.x, vanima toetatud versiooni, tugi lÔpeb 13. novembril.
Peamised uuendused:
- Lisatud on asĂŒnkroonse sisendi/vĂ€ljundi alamsĂŒsteem, mis vĂ”imaldab suurendada sisendi/vĂ€ljundi lĂ€bilaskevĂ”imet ja vĂ€ltida viivitusi. Lisaks kĂ”igil platvormidel saadaval oleva AIO (io_method=worker) universaalse teostuse, mis pĂ”hineb mitme töötlejate protsessi tĂ€itmisel (vaikimisi 3), saab Linuxis kasutada asĂŒnkroonse sisendi/vĂ€ljundi liidest io_uring (io_method=io_uring), mis on toetatud alates Linuxi kĂ€rgest 5.1. AsĂŒnkroonset sisendi/vĂ€ljundit kasutatakse praegu ainult failisĂŒsteemist andmete lugemisega seotud operatsioonide, nagu jĂ€rjestikune lĂ€bimine, indeksikĂ€su skaneerimine ja hooldus (vacuum), kiirendamiseks. MĂ”nes testis toob AIO rakendamine kaasa jĂ”udluse suurenemise 2-3 korda. Kirjutamise operatsioonid jĂ€tkuvad sĂŒnkroonselt ACID nĂ”uete tĂ€itmiseks.
- Rakendatud on âskip scanâ optimeerimine mitme veeru indeksites, tĂ€nu millele saab indeksit kasutada mitte ainult esimese indekseeritud veeru ja veergude tĂ€ieliku sidumise kontrollimiseks, vaid ka eraldi indekseeritud veergude töötlemiseks. NĂ€iteks varem, kui loodi B-tree indeks veergudele â(status, date)â, kasutati indeksit ainult pĂ€ringute jaoks, mis kontrollisid vĂ€lja âstatusâ vĂ”i mĂ”lemat vĂ€lja âstatusâ ja âdateâ, ning kui pĂ€ringus kontrolliti ainult vĂ€lja âdateâ, toimus tabeli sisu skaneerimine. âSkip scanâ reĆŸiim vĂ”imaldab teatud olukordades indeksi skaneerimist, kui pĂ€ringus kontrollitakse ainult vĂ€lja âdateâ. ReĆŸiimi rakendatakse ainult âB-treeâ indeksite puhul, kui pĂ€ringus kasutatakse indekseeritud vĂ€lja ĂŒle tees, kui vahele jÀÀv vĂ€li omab vĂ€heseid erinevaid vÀÀrtusi (nĂ€iteks optimeerimine toimib, kui vĂ€li âstatusâ omab mitmeid kindlaid vÀÀrtusi).
- Lisa on optimeeritud indeksite tĂ”husamat kasutamist pĂ€ringutes, mis sisaldavad konstruktsioone "OR" ja "IN (âŠ)" kus klause, samuti on parendatud tabelite ĂŒhendamise planeerimise ja tĂ€itmise jĂ”udlust (nĂ€iteks on kiirendatud ristiĂŒhendamise koodi ja lubatud kasutada inkrementeerivat sortimist tabelite ĂŒhendamisel).
- Lisatud tugi GIN (Generalized Inverted Index) indeksite paralleelse ehitamise toetamiseks, mida kasutatakse keerukate vÀÀrtuste, nagu massiivide, indekseerimiseks ja tÀieliku tekstiotsingu vÔi JSON-struktuuride otsingu korraldamiseks.
- Lisatud vÔimalus luua materjaliseeritud vaateid ja vÔtmeid sektsioonideks jagatud tabelites, mille unikaalsed indeksid ei kasuta B-tree struktuuri.
- TĂ”steti ĂŒldist lukustusjĂ”udlust pĂ€ringute jaoks, mis töötavad suure arvu tabelitega, samuti tehti parandusi sektsioonideks jagatud tabelite pĂ€ringute töötlemisel, kiirendades mittekasutatavate sektsioonide filtreerimist ja koosliitmist (JOIN).
- Kiirendatud tekstioperatsioonid, nagu ĂŒlemineku- ja alatiste funktsioonid. Lisatud PG_UNICODE_FAST reĆŸiim Unicode-mĂ€rkide lokaalide omaduste arvestuse kiirendamiseks.
- Rakendatud vÔimalus salvestada pÀringute planeerija statistika pÀrast uuendust oluline PostgreSQL versioonide vahel. See muudatus vÔimaldab vÀltida ressursside intensiivse "ANALYZE" operatsiooni tÀitmist pÀrast uue versiooni kÀivitamist, mille jooksul tÀheldatakse andmebaasi jÔudluse langust.
- TĂ”stetud pg_upgrade utiliidi jĂ”udlust, mida kasutatakse PostgreSQL-i uue suurversiooni automaatseks ĂŒleminekuks. Optimeerimised on eriti mĂ€rgatavad andmebaasi uuendamisel, mis sisaldab suurt hulka objekte, nagu tabelid ja jĂ€rjestused. pg_upgrade töö kiirendamiseks on lisatud ka "âjobs N" lipu toetamine, et vĂ”imaldada N lĂ”ime kaudu paralleelset kontrollimist ja "âswap" lipp, et asendada andmefailide kataloogid tĂ€ielikult ilma viidatud, kloonimise ja failide kopeerimiseta.
- Lisatud tugi virtuaalsete genereeritavate veergude jaoks, mille vÀÀrtused arvutatakse jooksvalt pĂ€ringute tĂ€itmisel, ilma kettale salvestamata. Kui lausungis âCREATE TABLEâŠâ on genereeritavate veergude jaoks mÀÀratud ainult vĂ”tmesĂ”na âGENERATEDâ ilma tĂŒĂŒbi tĂ€psustamiseta (STORED vĂ”i VIRTUAL), siis rakendatakse uus variant vaikevÀÀrtusena vana rakenduse asemel. Vanas rakenduses genereeriti vÀÀrtused âINSERTâ vĂ”i âUPDATEâ toimingute tĂ€itmise ajal ja salvestati kettale edasiseks kasutamiseks. Virtuaalsete genereeritavate veergude puuduseks on, et neid ei saa kasutada indeksites, aga plussiks on vĂ”imalus andmete normaliseerimiseks ja muutmiseks jooksvalt (see on asjakohane, kui töötatakse JSON-andmetega). Mis puutub klassikalistesse salvestatud genereeritavatesse veergudesse, siis on uues versioonis neile tagatud loogilise replikatsiooni tugi.
- INSERT, UPDATE, DELETE ja MERGE kĂ€skudes on rakendatud vĂ”imalus tootmisprotsessis vĂ€lja tuua möödunud (OLD) ja praegused (CURRENT) vÀÀrtused lauses RETURNING. NĂ€iteks: âUPDATE⊠RETURNING WITH (OLD AS o, NEW AS n) o.*, n.*.â.
- Lisatud funktsioon uuidv7() juhuslike ainulaadsete identifikaatorite genereerimiseks UUIDv7 formaadis. Erinevalt vanast UUID genereerimise funktsioonist (gen_random_uuid), mis on nĂŒĂŒd lisaks saadaval nime all uuidv4(), sisaldab UUIDv7 juhusliku vÀÀrtuse kĂ”rval ka genereerimise aega. UUID vÀÀrtuses oleva jĂ€rjestatud osa olemasolu (esimesed 12 sĂŒmbolit â ajatemper, jĂ€rgnevad 18 â juhuslik vÀÀrtus) suurendab sorteerimise ja indekseerimise efektiivsust, mis on asjakohane, kuna UUID-d kasutatakse tavaliselt peamisteks vĂ”tmeteks (nĂ€iteks, lĂ€hedal asuvad ajaliselt loodud vĂ”tmed on indeksis ĂŒksteise lĂ€hedal).
- LIKE operatsioonis on rakendatud tugi tekstipĂ”histele vastetele, mis kasutavad mÀÀratlemata lokaalsuse omadusi âcollationâ, vĂ”imaldades teha vasteteid, vĂ”ttes arvesse sĂŒmbolite tĂ€hendust (nĂ€iteks vĂ”ib vĂ”rreldes mitte arvesse vĂ”tta rĂ”hku). Lisatud on CASEFOLD funktsioon sĂŒmbolite suuruse muutmiseks, vĂ”ttes arvesse lokaalsuse omadusi âcollationâ (nĂ€iteks mĂ”ned sĂŒmbolid vĂ”ivad omada rohkem kui kahte vĂ€ikesekirja varianti vĂ”i nĂ”uda vĂ”rreldes suurte tĂ€htede muutmist madalate asemel).
- Lisatud on ajapiirangute (temporal constraint) kasutamisvÔime. "PRIMARY KEY" ja "UNIQUE" vÀÀrtuste puhul ajapiirangute lisamiseks tuleks kasutada vÀljendit "WITHOUT OVERLAPS", "FOREIGN KEY" vÀÀrtuse puhul aga vÀljendit PERIOD. NÀiteks esmane vÔtmete defineerimisel on vÔimalik piiritleda vÔtmeid, millel on kattuvad ajavahemikud.
- Lisatud kÀsk "CREATE FOREIGN TABLE ⊠LIKE command", mis loob vÀlise tabeli skeemi kohaliku tabeli definitsiooni pÔhjal.
- Lisatud tugi andmebaasi (SĂBD) ĂŒhendamiseks, kasutades OAuth 2.0 pĂ”hist autentimist, millega asendatakse parool juurdepÀÀsu tokeniga. Oauth'i kasutamine vĂ”imaldab mitte salvestada paroole andmebaasi, vaid tuvastada kasutajad vĂ€liste teenuste kaudu ning kasutada selliseid vĂ”imalusi nagu kahefaktoriline autentimine ja ĂŒhtne sisselogimine (SSO).
- Lisatud funktsioon ssl_tls13_ciphers(), mille kaudu on vĂ”imalik mÀÀrata TLSv1.3 protokolli kasutamisel lubatud krĂŒpteerimisalgoritmide loetelu.
- Toetuse hĂŒlgame ja ajutise eemaldamise plaanipĂ€raselt on md5 algoritmiga autentimise tugi passikoodide hashimiseks. Soovitatav on kasutada SCRAM algoritmi (SCRAM-SHA-256), mis ilmus PostgreSQL 10. Lisaks on rakendatud SCRAM pĂ”hise autentimise toimetamine postgres_fdw ja dblink kaudu vĂ€listesse PostgreSQL serveritesse.
- Operatsiooni "EXPLAIN ANALYZE" kĂ€itamisel on vĂ€lja antud teave indeksi skaneerimise ajal toimunud otsingute arvu ja pĂ€ringu kĂ€itamise ajal mĂ€lu kasutamise kohta. "EXPLAIN ANALYZE VERBOSE" vĂ€ljundisse on lisatud teave CPU, WAL-logi ja lugemise intensiivsuse kohta. tabelisse pg_stat_all_tables on lisatud teave VACUUM'i ja tabelite analĂŒĂŒsi jaoks kulutatud ajast. Saadaval on infod sisendi/vĂ€ljundi ja WAL-logi koormuse intensiivsuse kohta eraldiseisvate ĂŒhenduste lĂ”ikes. pg_stat_subscription_stats ja logides on lisatud teave konfliktide diagnoosimise kohta andmejoonise operaatorite kirjutiste kĂ€igus.
- Uutes installatsioonides on vaikimisi lubatud kasutamine kontrollsumma andmete terviklikkuse kontrollimiseks. Sellise kĂ€itumise peatamiseks initdb kĂ€ivitamisel tuleb kasutada valikut "âno-data-checksums".
- Pg_createsubscriber utiliidi on lisatud lipp ââallâ, et luua loogilisi replikaid ĂŒhe kĂ€suga korraga kĂ”ikidele andmebaasidele.
- Rakendatud uus versioon (3.2) protokollist, mida kasutatakse vĂ€listest utiliidest suhtlemiseks andmebaasihaldussĂŒsteemiga ja mis on rakendatud raamatukogus libpq. Eelmine protokolli vĂ€rskendus toimus PostgreSQL 7.4-s (aastal 2003). Raamatukogus libpq jĂ€tkab vaikimisi kasutamist versioon 3.0.
Allikas: opennet.ru
