Pas një viti zhvillimi, është publikuar dega e re stabile e DBMS PostgreSQL 18. Përditësimet për degën e re do të lëshohen për një periudhë pesëvjeçare deri në nëntor 2030. Mbështetje për PostgreSQL 13.x, degën më të vjetër të mbështetur, do të ndalet më 13 nëntor.
TĂ« rejat kryesore:
- ĂshtĂ« shtuar njĂ« nĂ«nsiqĂ« pĂ«r hyrje/dalja asinkron, e cila lejon rritjen e kapacitetit tĂ« hyrje/dalja dhe elimimin e vonesave. NĂ« pĂ«rveçoh qĂ« egziston njĂ« implementim universali AIO (io_method=worker), i bazuar nĂ« ekzekutimin e disa proceseve pĂ«rpunuesish (3 Ă«shtĂ« parametrizimi i paracaktuar), nĂ« Linux mund tĂ« pĂ«rdoret ndĂ«rfaqja e hyrjes/daljes asinkron io_uring (io_method=io_uring), e mbĂ«shtetur qĂ« nga bĂ«rthama Linux 5.1. Hyrja/dalja asinkron deri tani Ă«shtĂ« angazhuar vetĂ«m pĂ«r tĂ« pĂ«rshpejtuar ekzekutimin e disa operacioneve qĂ« lidhen me leximin e tĂ« dhĂ«nave nga sistemi i skedave, si skanimi sekondar, skanimi i hartĂ«s sĂ« indekseve dhe realizimi i pastrimit (vacuum). NĂ« disa teste, pĂ«rdorimi i AIO çon nĂ« rritjen e performancĂ«s pĂ«r 2-3 herĂ«. Operacionet e shk writehen vazhdojnĂ« tĂ« kryhen nĂ« modalitetin sinkron pĂ«r tĂ« pĂ«rmbushur kĂ«rkesat ACID.
- ĂshtĂ« realizuar optimizimi 'skip scan' nĂ« indekset me shumĂ« kolona, duke lejuar qĂ« indeksi tĂ« pĂ«rdoret jo vetĂ«m pĂ«r verifikimin e kolonĂ«s sĂ« parĂ« tĂ« indekssuar dhe lidhjen e plotĂ« tĂ« kolonave, por gjithashtu pĂ«r pĂ«rpunimin e veçantĂ« tĂ« kolonave tĂ« tjera tĂ« indekssuara. PĂ«r shembull, mĂ« parĂ«, kur krijohej njĂ« indeks B-tree mbi kolonat '(status, date)', indeksi pĂ«rdorej vetĂ«m pĂ«r kĂ«rkesat qĂ« kontrollonin fushen 'status' ose tĂ« dy fushat 'status' dhe 'date', ndĂ«rsa gjatĂ« verifikimit nĂ« kĂ«rkesĂ« vetĂ«m e fushĂ«s 'date', ka pasur njĂ« skanim tĂ« pĂ«rmbajtjes sĂ« tabelĂ«s. Modaliteti 'skip scan' i lejon nĂ« disa situata tĂ« skanojnĂ« indeksi kur pĂ«rfshihet vetĂ«m fusha 'date'. Ky modalitet aplikohet vetĂ«m pĂ«r indkeset 'B-tree' kur pĂ«rdoret nĂ« kĂ«rkesĂ« me operatorin kushtor '=' mbi fushĂ«n e indekssuar, nĂ« situata kur fusha e munguar ka njĂ« numĂ«r tĂ« vogĂ«l vlerash tĂ« ndryshme (p.sh., optimizimi do tĂ« funksionojĂ« nĂ«se fusha 'status' ka disa vlera fikse).
- Janë shtuar optimizime që përdorin më efektivisht indkeset për kërkesat që përmbajnë struktura 'OR' dhe 'IN (...)' në blokun 'WHERE', si dhe rrisin performancën e planifikimit dhe ekzekutimit të bashkimeve të tabelave (p.sh., është akceleruar kodi i bashkimeve të hash-it dhe lejohet përdorimi i renditjes inkrementale gjatë bashkimit të tabelave).
- ĂshtĂ« shtuar mbĂ«shtetje pĂ«r paralelizimin e ndĂ«rtimit tĂ« indekseve GIN (Indeksi i PĂ«rgjithĂ«suar i Invertuar), tĂ« cilat pĂ«rdoren pĂ«r indeksonin e vlerave tĂ« pĂ«rbĂ«ra, si pĂ«r shembuj, pĂ«r array dhe pĂ«r organizimin e kĂ«rkimeve mbi tĂ« dhĂ«na tĂ« plota tekstuale ose struktura JSON.
- ĂshtĂ« shtuar mundĂ«sia pĂ«r tĂ« krijuar pamje materializuese dhe çelĂ«za pĂ«r ndarjen e tabelave me indekse me shenjĂ«n 'unique', qĂ« nuk pĂ«rdorin strukturĂ«n B-tree.
- ĂshtĂ« pĂ«rmirĂ«suar performanca e bllokimeve pĂ«r kĂ«rkesat qĂ« punojnĂ« me njĂ« numĂ«r tĂ« madh tabelash, si dhe janĂ« bĂ«rĂ« pĂ«rmirĂ«sime nĂ« trajtimin e kĂ«rkesave ndaj tabelave tĂ« ndara, duke pĂ«rshpejtuar pĂ«rjashtimin e seksioneve tĂ« pashfrytĂ«zuara dhe operacionet e bashkimit (JOIN).
- JanĂ« pĂ«rshpejtuar operacionet me tekst, si funksionet pĂ«r vendosjen nĂ« shkronja tĂ« mĂ«dha/tĂ« vogla. ĂshtĂ« shtuar modaliteti PG_UNICODE_FAST pĂ«r pĂ«rshpejtimin e llogaritjes sĂ« pronave tĂ« locale tĂ« simboleve Unicode.
- ĂshtĂ« realizuar mundĂ«sia e ruajtjes sĂ« statistikave tĂ« planifikuesit tĂ« kĂ«rkesave pas pĂ«rditĂ«simit midis lĂ«shimeve tĂ« rĂ«ndĂ«sishme tĂ« PostgreSQL. Ky ndryshim lejon shmangien e realizimit tĂ« operacionit kĂ«rkesor 'ANALYZE' pas nisjes sĂ« versionit tĂ« ri, deri kur pĂ«rfundimi i tij shfaq njĂ« rĂ«nie tĂ« performancĂ«s sĂ« DBMS.
- ĂshtĂ« rritur performanca e utilitarit pg_upgrade, i pĂ«rdorur pĂ«r automatizimin e kalimit nĂ« lĂ«shimin e ri tĂ« rĂ«ndĂ«sishĂ«m tĂ« PostgreSQL. Optimizimet janĂ« veçanĂ«risht tĂ« dukshme kur pĂ«rditĂ«sohen DB-tĂ« qĂ« pĂ«rmbajnĂ« njĂ« numĂ«r tĂ« madh objektesh, si tabela dhe sekuenca. PĂ«r tĂ« pĂ«rshpejtuar punĂ«n e pg_upgrade, Ă«shtĂ« shtuar gjithashtu flamuri 'âjobs N' pĂ«r paralelizimin e kontrolleve nĂ« N procese dhe flamuri 'âswap' pĂ«r zĂ«vendĂ«simin e katalogĂ«ve me tĂ« dhĂ«na nĂ« tĂ«rĂ«si pa krijimin e lidhjeve, pa klonim dhe pa kopjimin e skedarĂ«ve.
- Shtuar mbĂ«shtetje pĂ«r kolonat e gjeneruara virtuale, vlerat e tĂ« cilave llogariten nĂ« flow nĂ« procesin e ekzekutimit tĂ« kĂ«rkesave, pa u ruajtur nĂ« disk. NĂ« shprehjen "CREATE TABLEâŠ" pĂ«r kolonat e gjeneruara, nĂ«se pĂ«rdoret vetĂ«m fjala kyçe "GENERATED" pa specifikuar llojin (STORED ose VIRTUAL), atĂ«herĂ« varianti i ri aplikohet si parazgjedhje nĂ« vend tĂ« realizimit tĂ« vjetĂ«r. NĂ« realizimin e vjetĂ«r, vlerat u gjeneruan gjatĂ« operacioneve "INSERT" ose "UPDATE" dhe u ruajtĂ«n nĂ« disk pĂ«r pĂ«rdorim tĂ« mĂ«vonshĂ«m. Disavantazhi i kolonave tĂ« gjeneruara virtuale Ă«shtĂ« pamundĂ«sia pĂ«r t'i pĂ«rdorur ato nĂ« indekse, ndĂ«rsa avantazhi Ă«shtĂ« mundĂ«sia pĂ«r tĂ« kryer normalizim dhe modifikimin e tĂ« dhĂ«nave nĂ« flow (tĂ« rĂ«ndĂ«sishme gjatĂ« punĂ«s me tĂ« dhĂ«nat JSON). Sa i pĂ«rket kolonave tĂ« gjeneruara tĂ« klasĂ«s klasik, nĂ« versionin e ri Ă«shtĂ« siguruar mbĂ«shtetje pĂ«r replikimin logjik.
- Në komandat INSERT, UPDATE, DELETE dhe MERGE është realizuar mundësia e daljes së vlerave të kaluara (OLD) dhe atyre aktuale (CURRENT) në shprehjen RETURNING. Për shembull, "UPDATE⊠RETURNING WITH (OLD AS o, NEW AS n) o.*, n.*.".
- Shtuar funksioni uuidv7() për gjenerimin e identifikuesve unikë të rastit në formatin UUIDv7. Ndryshe nga funksioni i vjetër për gjenerimin e UUID (gen_random_uuid), i cili tani është gjithashtu në dispozicion nën emrin uuidv4(), në UUIDv7 përveç vlerës së rastësishme përfshihet koha e gjenerimit. Prania e pjesëve të renditura në vlerën UUID (dymbëdhjetë karakteret e para - koha epokale, dhe 18 të tjerat - vlera e rastësishme) rrit efikasitetin e renditjes dhe indeksonit, çka është e rëndësishme për shkak se UUID zakonisht përdoren për çelësat primarë (për shembull, çelësat e krijuar në një kohë të afërt vendosen afër njëri-tjetrit në indeks).
- Në operacionin "LIKE" është realizuar mbështetje për përputhjet me tekstin, në të cilat përdoren pronësi të paçmuara të lokalitetit "collation", duke lejuar përputhje me kuptimin e simboleve (për shembull, gjatë krahasimit mund të mos merret parasysh shenja e theksit). Shtuar funksioni CASEFOLD për ndryshimin e regjistrit të simboleve në përputhje me pronësitë e lokalitetit "collation" (për shembull, disa simbole kanë më shumë se dy variante të vogla ose gjatë krahasimit kërkojnë konvertim në regjistrin e madh, në vend të atij të vogël).
- Shtuar mundësinë e përdorimit të kufizimeve përkohore (temporal constraint). Në vlerat "PRIMARY KEY" dhe "UNIQUE" për të shtuar kufizime përkohore duhet të përdoret shprehja "WITHOUT OVERLAPS", dhe në vlerën "FOREIGN KEY" - shprehja PERIOD. Për shembull, gjatë përcaktimit të çelësave primarë mund të kufizohen çelësat me intervale të mbivendosura të kohës.
- Shtuar komandën "CREATE FOREIGN TABLE ⊠LIKE command" për krijimin e një skeme të një tabele të jashtme mbi bazën e përcaktimit të një tabele lokale.
- Shtuar mbështetje për lidhjen me DBMS, duke përdorur autentifikimin mbi bazën e OAUTH 2.0 me përdorimin e tokenit të aksesit në vend të fjalëkalimit. Përdorimi i OAUTH lejon që të mos ruhen fjalëkalimet në DB, por të identifikohen përdoruesit përmes shërbimeve të jashtme, si dhe të përdoren mundësi të tilla si autentifikimi me dy faktorë dhe pika e vetme hyrjeje (SSO).
- Shtuar funksioni ssl_tls13_ciphers(), përmes të cilit mund të përcaktohet lista e algoritmeve të kodimit të lejuar gjatë lidhjes me përdorimin e protokollit TLSv1.3.
- Në kategorinë e mbështetjeve të vjetra dhe të planifikuara për t'u hequr është kaluar mbështetjes për autentifikimin duke përdorur algoritmin md5 për heshimin e fjalëkalimeve. Në vend të md5, rekomandohet përdorimi i algoritmit SCRAM (SCRAM-SHA-256), i cili u shfaq në PostgreSQL 10. Po ashtu, është e shënuar realizimi i mbështetjes për kalimin e autentifikimit mbi bazën e SCRAM gjatë lidhjes përmes postgres_fdw dhe dblink me serverë të jashtëm PostgreSQL.
- GjatĂ« ekzekutimit tĂ« operacionit "EXPLAIN ANALYZE", Ă«shtĂ« siguruar dalja e informacionit mbi numrin e operacioneve tĂ« kĂ«rkimit nĂ« indekse gjatĂ« skanimit tĂ« indeksit dhe numrin e kĂ«rkesave nĂ« buffer gjatĂ« ekzekutimit tĂ« kĂ«rkesĂ«s. NĂ« daljen "EXPLAIN ANALYZE VERBOSE" Ă«shtĂ« pĂ«rfshirĂ« statistika mbi CPU, WAL-ditarin dhe intensitetin e operacioneve tĂ« leximit. NĂ« tabelĂ«n pg_stat_all_tables janĂ« shtuar tĂ« dhĂ«na mbi kohĂ«n e shpenzuar pĂ«r operacionin VACUUM dhe analizĂ«n e tabelave. ĂshtĂ« ofruar statistika mbi intensitetin e hyrjes/daljes dhe ngarkesĂ«n nĂ« WAL-ditar sipas lidhjeve tĂ« veçanta. NĂ« pg_stat_subscription_stats dhe log-et Ă«shtĂ« shtuar informacion me diagnostikĂ« pĂ«r konfliktet gjatĂ« ekzekutimit tĂ« operacioneve tĂ« shkruara gjatĂ« replikimit logjik.
- NĂ« instalimet e reja Ă«shtĂ« aktivizuar si parazgjedhje pĂ«rdorimi i kontrolleve pĂ«r tĂ« verifikuar integritetin e tĂ« dhĂ«nave tĂ« ruajtura. PĂ«r tĂ« anuluar kĂ«tĂ« sjellje gjatĂ« ekzekutimit tĂ« initdb, duhet tĂ« pĂ«rdoret opsioni "âno-data-checksums".
- NĂ« utilitarin pg_createsubscriber Ă«shtĂ« shtuar flagu "âall" pĂ«r krijimin e replikave logjike me njĂ« komando menjĂ«herĂ« pĂ«r tĂ« gjitha DB.
- Versioni e reviduar (3.2) e protokollit, i përdorur për ndërveprimin e mjeteve të jashtme me DBMS, është implementuar në bibliotekën libpq. Versioni i kaluar i protokollit u lëshua në PostgreSQL 7.4 (2003). Në bibliotekën libpq vazhdon të përdoret versioni 3.0 si default.
Burimi: opennet.ru
