PostgreSQL 18 andmebaasisĂŒsteemi vĂ€ljaanne

PÀrast aastast arendust on avaldatud uus stabiilne PostgreSQL andmebaasi versioon 18. Uue versiooni vÀrskendusi antakse vÀlja jÀrgmise viie aasta jooksul kuni novembrini 2030. PostgreSQL 13.x, kÔige vanema toetatava versiooni toetus, lÔpetatakse 13. novembril.

PÔhilised uuendused:

  • Taas on lisatud asĂŒnkroonse sisendi/vĂ€ljundi alamsĂŒsteem, mis suurendab sisendi/vĂ€ljundi lĂ€bilaskvust ja kĂ”rvaldab viivitused. Lisaks platvormideĂŒlesele universaalsele AIO (io_method=worker) teostusele, mis pĂ”hineb mitme töötlemisprotsessi (vaikimisi 3) tĂ€itmisel, 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ĂŒnkroonne sisendi/vĂ€ljund on hetkel tööprotsesside kiirendamiseks rakendatud ainult mĂ”nede failisĂŒsteemist andmete lugemisega seotud toimingute jaoks, nagu jĂ€rjestikune skaneerimine, indeksite bittide kaardistamine ja puhastamine (vacuum). MĂ”nedes testides toob AIO kasutamine kuni 2-3 korda suurema jĂ”udluse. Kirjutamisoperatsioonid jĂ€tkuvad sĂŒnkroonsete protsesside kaudu ACID-nĂ”uete tĂ€itmiseks.
  • Realiseeriti «skip scan» optimeerimine mitme veeru indeksites, mille tĂ”ttu saab indeksit kasutada mitte ainult esimese indekseeritud veeru ja kĂ”igi veergude tĂ€ieliku sidumise kontrollimiseks, vaid ka indekseeritud teiste veergude eraldi töötlemiseks. NĂ€iteks varem B-puu indeksi loomisel veergudele «(status, date)» rakendati indeks vaid pĂ€ringutele, mis kontrollisid «status» vĂ€lja vĂ”i mĂ”lemat vĂ€lja «status» ja «date», kuid kui pĂ€ringus kontrolliti ainult vĂ€lja «date», tehti tabeli sisu skaneerimine. «Skip scan» reĆŸiim vĂ”imaldab teatud olukordades indeksi skaneerimist pĂ€ringus, kus kontrollitakse ainult vĂ€lja «date». ReĆŸiimi rakendatakse ainult B-puu indeksite puhul, kui pĂ€ringus kasutatakse tingimuslikku operaatorit «=» indekseeritud vĂ€lja suhtes, olukordades, kus puuduval vĂ€ljal on vĂ€ike arv erinevaid vÀÀrtusi (nĂ€iteks optimeerimine töötab, kui vĂ€lja «status» omab mĂ”nda kindlat vÀÀrtust).
  • On lisatud optimeerimised, mis kasutavad indekse tĂ”husamalt pĂ€ringutes, mis sisaldavad konstruktsioone "OR" ja "IN (...)" plokis "WHERE", samuti parandavad tabelite ĂŒhendamise planeerimise ja tĂ€itmise töökindlust (nt kiirus on suurenenud nii rĂ€sihÀÀlte ĂŒhendamise korral kui ka sisselĂŒlitatud inkrementaalse sortimise korral tabelite ĂŒhendamisel).
  • On lisatud GIN (Generalized Inverted Index) indeksite ehitamise paralleelset toetust, mida kasutatakse komposiitvÀÀrtuste, nĂ€iteks massiivide indekseerimiseks, ja tĂ€istekstiandmete vĂ”i JSON-struktuuride otsingu korraldamiseks.
  • On lisatud vĂ”imalus luua materialiseeritud vaateid ja vĂ”tmeid tabelite sektsioneerimiseks unikaalsete indeksitega, mis ei kasuta B-tree struktuuri.
  • On suurenenud ĂŒldine lukustuste jĂ”udlus pĂ€ringute puhul, mis töötavad suure arvu tabelitega, ning parendatud on sektsioneeritud tabelite pĂ€ringute töötlemist, mis kiirendavad kasutamata sektsioonide filtreerimist ja ĂŒhendamisoperatsioone (JOIN).
  • Kiirus on suurenenud tekstiga seotud toimingutes, nagu suur- ja vĂ€iketĂ€htedeks muutmise funktsioonid. Lisatud on PG_UNICODE_FAST reĆŸiim Unicode-mĂ€rkide kohalike omaduste arvestuse kiirendamiseks.
  • Rakendatud on vĂ”imalus sĂ€ilitada pĂ€ringuplaanide statistikat pĂ€rast versiooniuuendusi suurte PostgreSQL versioonide vahel. See muudatus aitab vĂ€ltida ressursside intensiivset „ANALYZE“ operatsiooni pĂ€rast uue versiooni kĂ€ivitamist, mille kĂ€igus on andmebaasi jĂ”udlus langenud.
  • Parandatud on pg_upgrade tööriista jĂ”udlust, mis automatiseerib ĂŒleminekut uuele PostgreSQL versioonile. Optimeerimised on eriti silmatorkavad andmebaaside uuendamisel, mis sisaldavad suures koguses objekte, nagu tabelid ja jĂ€rjestused. Pg_upgrade töö kiirendamiseks on licatud ka lipp „—jobs N“, mis vĂ”imaldab N niidi tĂ”husat kontrollimist, ja lipp „—swap“, mis asendab andmekaustad tĂ€ielikult ilma viidete, koondamise vĂ”i failide kopeerimiseta.
  • Virtuaalsed genereeritud veerud, mille vÀÀrtused arvutatakse jooksvalt pĂ€ringute tĂ€itmise kĂ€igus, ilma et neid diskil sĂ€ilitataks, saavad nĂŒĂŒd toetust. Kui "CREATE TABLE
" lauses on genereeritud veergude jaoks kasutatud ainult mĂ€rksĂ”na "GENERATED" ilma tĂŒĂŒpide (STORED vĂ”i VIRTUAL) tĂ€psustamiseta, rakendatakse uus variant vaikimisi vanade lahenduste asemel. Vanas lahenduses genereeriti vÀÀrtused "INSERT" vĂ”i "UPDATE" operatsioonide ajal ja sĂ€ilitati diskil edasisteks kasutamiseks. Virtuaalsete genereeritud veergude puuduseks on nende kasutamise vĂ”imatus indeksites, kuid eeliseks on andmete normaliseerimise ja muudatuste tegemise vĂ”imalus jooksvalt (mis on asjakohane JSON-andmete töötlemisel). Mis puutub klassikalistesse salvestatud genereeritud veergudesse, siis uus versioon toetab nende jaoks loogilist replikatsiooni.
  • INSERT, UPDATE, DELETE ja MERGE kĂ€skudes on nĂŒĂŒd vĂ”imalik vĂ€ljastada varasemaid (OLD) ja praeguseid (CURRENT) vÀÀrtusi RETURNING vĂ€ljendis. NĂ€iteks: "UPDATE
 RETURNING WITH (OLD AS o, NEW AS n) o.*, n.*.".
  • Lisatud on uuidv7() funktsioon, mis genereerib juhuslikke unikaalseid identifikaatoreid UUIDv7 formaadis. Erinevalt vanast UUID genereerimise funktsioonist (gen_random_uuid), mis on nĂŒĂŒd saadaval ka nime all uuidv4(), sisaldab UUIDv7 lisaks juhuslikule vÀÀrtusele ka genereerimise aega. UUID vÀÀrtuste jĂ€rjestatud osade olemasolu (esimesed 12 symbolit tĂ€histavad ajastut ja jĂ€rgnev 18 juhuslikku vÀÀrtust) parandab sortimise ja indekseerimise efektiivsust, mis on oluline, kuna UUID-d kasutatakse tavaliselt peamisteks vĂ”tmeteks (nĂ€iteks vĂ”tmed, mis on loodud samaaegselt, paigutatakse indeksi lĂ€hedale).
  • LIKE operatsioonis on toetatud tekstivĂ”rdlemise, kus kasutatakse mÀÀramatuid lokaadi omadusi "collation", mis vĂ”imaldavad teostada tĂ€henduspĂ”hiseid vĂ”rdlusi (nt vĂ”rdlemisel vĂ”ib rĂ”hku mitte arvesse vĂ”tta). Lisatud on CASEFOLD funktsioon, mis muudab symbolite suurust lokaadi omaduste "collation" alusel (nt mĂ”ned sĂŒmbolid vĂ”ivad omada rohkem kui kahte vĂ€ikese kirjaga varianti vĂ”i vĂ”rdlemisel vĂ”ib olla vajalik muuta need suurteksti, mitte vĂ€ikesteks).
  • Lisatud on ajapiirangute (temporal constraint) kasutamise vĂ”imalus. "PRIMARY KEY" ja "UNIQUE" vÀÀrtustes ajapiirangute lisamiseks tuleks kasutada vĂ€ljendit "WITHOUT OVERLAPS", samas kui "FOREIGN KEY" vÀÀrtuses kasuta vĂ€ljendit PERIOD. NĂ€iteks, kui mÀÀratleda pĂ”hivĂ”tmeid, saab piirata vĂ”tmeid, millel on kattuvad ajavahemikud.
  • Lisatud kĂ€sk „CREATE FOREIGN TABLE 
 LIKE command“ vĂ€liste tabelite skeemi loomiseks, pĂ”hinedes kohaliku tabeli mÀÀratlemisel.
  • Lisatud tugi andmebaasiĂŒhendusele, kasutades OAUTH 2.0 autentimist, rakendades juurdepÀÀsutokenit parooli asemel. OAUTH kasutamine vĂ”imaldab mitte salvestada paroole andmebaasis, tuvastada kasutajaid vĂ€liste teenuste kaudu ning kasutada selliseid vĂ”imalusi nagu kahefaktoriline autentimine ja ĂŒhtne sisenemine (SSO).
  • Lisatud funktsioon ssl_tls13_ciphers(), mille kaudu saab mÀÀrata TLSv1.3 protokolliga ĂŒhenduse loomisel lubatud krĂŒptimisalgoritmide loendi.
  • Toetatuks, mis on plaanis eemaldada, on md5 algoritmi abil toimuv autentimine paroolide hasheerimiseks. Soovitame kasutada SCRAM (SCRAM-SHA-256) algoritmi, mis ilmus PostgreSQL 10-s. Samuti on rakendatud SCRAM-pĂ”hise autentimise edastamise tugi, kui ĂŒhendatakse vĂ€liste PostgreSQL serveritega lĂ€bi postgres_fdw ja dblink.
  • Teostades kĂ€sku „EXPLAIN ANALYZE”, on tagatud teabe vĂ€ljastamine indeksite otsinguoperatsioonide arvu kohta indeksi skaneerimise ajal ja andmemĂ€lu viidete arvu kohta pĂ€ringu tĂ€itmisel. Outputile „EXPLAIN ANALYZE VERBOSE” on lisatud statistika CPU, WAL-i logi ja lugemisoperatsioonide intensiivsuse kohta. Tabelisse pg_stat_all_tables on lisatud info, mis kĂ€sitleb aega, mis kulutati VACUUM ja tabelite analĂŒĂŒsile. Pakutud on statistikat, mis kĂ€sitleb sisendi/vĂ€ljundi intensiivsust ja WAL-logi koormust eraldi ĂŒhenduste lĂ”ikes. pg_stat_subscription_stats ja logidesse on lisatud teave uute kirjutamiste operatsioonide konfliktide diagnoosimise kohta ajaliste replikatsioonide teostamisel.
  • Uutes installatsioonides on vaikimisi lubatud kontrollsummade kasutamine salvestatud andmete terviklikkuse kontrollimiseks. Selle kĂ€itumise tĂŒhistamiseks tuleb initdb kĂ€ivitamisel kasutada suvandit „—no-data-checksums”.
  • Tööriistale pg_createsubscriber on lisatud lipp „—all”, mis vĂ”imaldab luua looge-replikatsioonid ĂŒhe kĂ€suga kĂ”igi andmebaaside jaoks.
  • On rakendatud uus versioon (3.2) protokollist, mida kasutatakse vĂ€liste tööriistade suhtlemiseks andmebaasi haldamise sĂŒsteemiga ja mis on teostatud teegis libpq. Eelmine protokolli uuendus toimus PostgreSQL 7.4-s (2003. aasta). Teegis libpq jĂ€tkab vaikimisi versiooni 3.0 kasutamist.

Allikas: opennet.ru

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster