Pas një vit zhvillimi, është publikuar dega e re stabile e sistemit të menaxhimit të bazave të dhënash PostgreSQL 18. Përditësimet për degen e re do të dalin për pesë vitet e ardhshme deri në nëntor 2030. Mbështetja për PostgreSQL 13.x, dega më e vjetër e mbështetur, do të përfundojë më 13 nëntor.
Novitetet kryesore:
- ĂshtĂ« shtuar nĂ«n-sistemi pĂ«r hyrje / dalje asinkrone, i cili lejon rritjen e kapacitetit tĂ« hyrjes / daljes dhe eliminimin e vonesave. PĂ«rveç zbatimit univers tĂ« AIO (io_method=worker) i cili Ă«shtĂ« nĂ« dispozicion nĂ« tĂ« gjitha platformat, i bazuar nĂ« ekzekutimin e disa proceseve pĂ«rpunuese (default 3), nĂ« Linux mund tĂ« aplikohet ndĂ«rfaqja pĂ«r hyrje / dalje asinkrone io_uring (io_method=io_uring), e mbĂ«shtetur qĂ« nga bĂ«rthama Linux 5.1. Hyrje / dalje asinkrone aktualisht pĂ«rdoret vetĂ«m pĂ«r tĂ« aceleruar kryerjen e disa operacioneve qĂ« lidhen me leximin e tĂ« dhĂ«nave nga sistema i skedarĂ«ve, si skanimi sekuencial, skanimi i hartĂ«s sĂ« indekseve dhe procesi i pastrimit (vacuum). NĂ« disa teste, pĂ«rdorimi i AIO çon nĂ« rritjen e performancĂ«s deri nĂ« 2-3 herĂ«. Operacionet e shkruar vazhdojnĂ« tĂ« kryhen nĂ« mĂ«nyrĂ« sinkrone pĂ«r tĂ« arritur kĂ«rkesat ACID.
- ĂshtĂ« implementuar optimizimi "skip scan" nĂ« indekset shumĂ«kolonale, i cili lejon qĂ« indeksi tĂ« pĂ«rdoret jo vetĂ«m pĂ«r verifikimin e kolonĂ«s sĂ« parĂ« tĂ« indeksuar dhe pĂ«r lidhjen e plotĂ« tĂ« kolonave, por gjithashtu pĂ«r pĂ«rpunimin e veçantĂ« tĂ« kolonave tĂ« tjera tĂ« indeksuara. PĂ«r shembull, mĂ« parĂ«, kur krijohej njĂ« indeks B-tree mbi kolonat "(status, date)", indeksi aplikohej vetĂ«m pĂ«r kĂ«rkesat qĂ« kontrollonin fushĂ«n "status" ose tĂ« dy fushat "status" dhe "date", ndĂ«rsa kur kontrollohej vetĂ«m fusha "date", bĂ«hej njĂ« skanimi i pĂ«rmbajtjes sĂ« tabelĂ«s. Rezhimi "skip scan" lejon qĂ« nĂ« disa raste tĂ« skanohet indeksi kur kĂ«rkohet vetĂ«m fusha "date". Kjo modalitet aplikohet vetĂ«m pĂ«r indeksat "B-tree" kur pĂ«rdoret njĂ« operator kushtor "=" mbi fushĂ«n e indeksuar, 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 e statusit "status" ka disa vlera fikse).
- Janë shtuar optimizime që përdorin në mënyrë më efikase indeksat për kërkesat që përmbajnë konstrukte "OR" dhe "IN (...)" në bllokun "WHERE", si dhe që rrisin performancën e planifikimit dhe ekzekutimit të bashkimeve të tabelave (p.sh., është përshpejtuar kodi për bashkimin e hash dhe është lejuar përdorimi i renditjes inkrementale gjatë bashkimit të tabelave).
- Shtuar përkrahjen për ndarjen në mënyrë paralele të ndërtimit të indekseve GIN (Indeksi i Ngritur i Përgjithshëm), të aplikuara për indeksonin vlera të përbërë, siç janë tabelat, dhe organizimin e kërkimit në të dhëna tekstuale ose struktura JSON.
- ĂshtĂ« shtuar mundĂ«sia pĂ«r tĂ« krijuar pĂ«rfaqĂ«sime materializuese dhe çelĂ«sa pĂ«r sekcionimin e tabelave me indekse me karakteristikĂ«n "unique", qĂ« nuk pĂ«rdorin strukturĂ«n B-tree.
- Rritur performanca e përgjithshme e bllokimeve për pyetje që punojnë me numër të madh tabelash, si dhe janë bërë përmirësime në përpunimin e pyetjeve për tabelat e ndara, duke përshpejtuar filtërimin e seksioneve të papërdorura dhe operacionet e bashkimit (JOIN).
- Përshpejtuar operacionet me tekst, si funksionet përkthimi në të madhe/të vogël. Shtuar mënyra PG_UNICODE_FAST për të përshpejtuar marrjen parasysh të pronave të lokaliteteve të simboleve Unicode.
- ĂshtĂ« implementuar mundĂ«sia pĂ«r tĂ« ruajtur statistikat e planifikuesit tĂ« kĂ«rkesave pas pĂ«rditĂ«simit midis rilĂ«sh tĂ« rĂ«ndĂ«sishme tĂ« PostgreSQL. Kjo ndryshim lejon shmangien e ekzekutimit tĂ« operacionit me kĂ«rkesa tĂ« larta "ANALYZE" pas nisjes sĂ« versionit tĂ« ri, deri nĂ« pĂ«rfundimin e tĂ« cilit vĂ«rehet njĂ« rĂ«nien e performancĂ«s sĂ« DBMS.
- ĂshtĂ« rritur performanca e utilitarit pg_upgrade, i cili pĂ«rdoret pĂ«r automatizimin e kalimit nĂ« njĂ« version tĂ« ri tĂ« rĂ«ndĂ«sishĂ«m tĂ« PostgreSQL. Optimiza janĂ« veçanĂ«risht tĂ« dukshme gjatĂ« pĂ«rditĂ«simit tĂ« DB, qĂ« pĂ«rmbajnĂ« njĂ« numĂ«r tĂ« madh objektesh, si tabelat dhe sekuencat. PĂ«r tĂ« pĂ«rshpejtuar punĂ«n e pg_upgrade Ă«shtĂ« shtuar gjithashtu njĂ« flamur "âjobs N" pĂ«r tĂ« paraleluar kontrollin nĂ« N fije dhe njĂ« flamur "âswap" pĂ«r tĂ« zĂ«vendĂ«suar katalogĂ«t me tĂ« dhĂ«na nĂ« tĂ«rĂ«si pa vendosur lidhje, pa klonim dhe pa kopjuar skedarĂ«t.
- ĂshtĂ« shtuar mbĂ«shtetje pĂ«r kolonat virtuale tĂ« gjeneruara, vlera e tĂ« cilave llogaritet gjatĂ« ekzekutimit tĂ« pyetjeve, pa u ruajtur nĂ« disk. NĂ« shprehjen «CREATE TABLEâŠÂ» pĂ«r kolonat e gjeneruara, nĂ«se Ă«shtĂ« specifikuar vetĂ«m fjala kyçe «GENERATED» pa sqarimin e tipit (STORED ose VIRTUAL), do tĂ« aplikohet varianti i ri si parazgjidhje nĂ« vend tĂ« realizimit tĂ« vjetĂ«r. NĂ« realizimin e vjetĂ«r, vlerat e gjeneruara krijoheshin gjatĂ« operacioneve «INSERT» ose «UPDATE» dhe ruheshin nĂ« disk pĂ«r pĂ«rdorim tĂ« mĂ«vonshĂ«m. Disavantazhi i kolonave virtuale tĂ« gjeneruara Ă«shtĂ« pamundĂ«sia pĂ«r t'i pĂ«rdorur ato nĂ« indekse, ndĂ«rsa avantazhi Ă«shtĂ« aftĂ«sia pĂ«r tĂ« kryer normalizimin dhe ndryshimin e tĂ« dhĂ«nave nĂ« flutur (relevant kur punoni me tĂ« dhĂ«nat JSON). Sa i pĂ«rket kolonave klasike tĂ« gjeneruara tĂ« ruajtura, nĂ« versionin e ri Ă«shtĂ« siguruar mbĂ«shtetje pĂ«r replikimin logjik pĂ«r to.
- Në komandat INSERT, UPDATE, DELETE dhe MERGE është realizuar mundësia e daljes së vlerave të kaluara (OLD) dhe aktuelle (CURRENT) në shprehjen RETURNING. Për shembull, «UPDATE⊠RETURNING WITH (OLD AS o, NEW AS n) o.*, n.*.»
- ĂshtĂ« shtuar funksioni uuidv7() pĂ«r gjenerimin e identifikuesve tĂ« rastĂ«sishĂ«m unikĂ« nĂ« formatin UUIDv7. Ndryshe nga funksioni i mĂ«parshĂ«m pĂ«r gjenerimin e UUID (gen_random_uuid), i cili tani Ă«shtĂ« gjithashtu nĂ« dispozicion me emrin uuidv4(), nĂ« UUIDv7 pĂ«rveç vlerĂ«s sĂ« rastĂ«sishme pĂ«rfshihet edhe koha e gjenerimit. Prania e pjesĂ«ve tĂ« renditura nĂ« vlerĂ«n UUID (12 karakteret e parĂ« â koha epokale, dhe 18 karakteret e mbetura â vlera e rastĂ«sishme) e rrit efikasitetin e renditjes dhe indekset, e cila Ă«shtĂ« relevante pasi UUID zakonisht pĂ«rdoren pĂ«r çelĂ«sat e parĂ« (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 krahasimet me tekstin, nĂ« tĂ« cilat pĂ«rdoren pronĂ«si tĂ« padeterminueshme tĂ« lokalitetit «collation», duke lejuar qĂ« tĂ« kryhen krahasime duke marrĂ« parasysh kuptimin e simboleve (pĂ«r shembull, gjatĂ« krahasimit mund tĂ« mos merret parasysh shenja e theksit). ĂshtĂ« shtuar funksioni CASEFOLD pĂ«r tĂ« ndryshuar rastin e simboleve duke marrĂ« parasysh pronĂ«sitĂ« e lokalitetit «collation» (pĂ«r shembull, disa simbole kanĂ« mĂ« shumĂ« se dy variante tĂ« vogla ose gjatĂ« krahasimit kĂ«rkojnĂ« transformim nĂ« tĂ« madh, e jo nĂ« tĂ« vogĂ«l).
- ĂshtĂ« shtuar mundĂ«sia e pĂ«rdorimit tĂ« kufizimeve temporale. NĂ« vlerat "PRIMARY KEY" dhe "UNIQUE" pĂ«r shtimin e kufizimeve temporale duhet tĂ« pĂ«rdoret shprehja "WITHOUT OVERLAPS", ndĂ«rsa nĂ« vlerĂ«n "FOREIGN KEY" â shprehja PERIOD. PĂ«r shembull, kur pĂ«rcaktohen çelĂ«sat primarĂ«, Ă«shtĂ« e mundur tĂ« kufizohen çelĂ«sat me intervale kohore tĂ« mbivendosura.
- ĂshtĂ« shtuar komanda "CREATE FOREIGN TABLE ⊠LIKE command" pĂ«r krijimin e skemĂ«s sĂ« njĂ« tabele tĂ« jashtme nĂ« bazĂ« tĂ« pĂ«rcaktimit tĂ« njĂ« tabele lokale.
- Shtuar mbështetje për lidhen në DBMS duke përdorur autentifikimin me OAUTH 2.0 duke aplikuar një token akses në vend të fjalëkalimit. Përdorimi i OAUTH lejon që të mos ruajmë fjalëkalimet në DB, por të identifikojmë përdoruesit përmes shërbimeve të jashtme, si dhe të përdorim mundësi të tilla si autentifikimi me dy faktorë dhe pika e vetme e hyrjes (SSO).
- Shtuar funksionin ssl_tls13_ciphers(), përmes të cilit mund të përcaktohet lista e algoritmeve të enkriptimit të lejuar për lidhjen duke përdorur protokollin TLSv1.3.
- Mbështetje për autentifikimin duke përdorur algoritmin md5 për hashimin e fjalëkalimeve është kaluar në kategorinë e vjetruar dhe të planifikuar për heqje. Në vend të md5, rekomandohet përdorimi i algoritmit SCRAM (SCRAM-SHA-256), i cili ka dalë në PostgreSQL 10. Gjithashtu, është vënë në dukje zbatimi i mbështetjes për përçimin e autentifikimit në bazë të SCRAM kur lidhemi përmes postgres_fdw dhe dblink në servera të jashtëm PostgreSQL.
- GjatĂ« ekzekutimit tĂ« operacionit "EXPLAIN ANALYZE" Ă«shtĂ« siguruar dalja e informacionit mbi numrin e operacioneve tĂ« kĂ«rkimeve nĂ« indekse gjatĂ« skanimit tĂ« indekseve dhe numrit tĂ« referimeve nĂ« bufe gjatĂ« ekzekutimit tĂ« kĂ«rkesĂ«s. NĂ« daljen "EXPLAIN ANALYZE VERBOSE" Ă«shtĂ« pĂ«rfshirĂ« statistika mbi CPU, WAL-logun 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 mbi WAL-logun sipas lidhjeve tĂ« veçanta. NĂ« pg_stat_subscription_stats dhe nĂ« log janĂ« shtuar informacione me diagnostikimin e konflikteve gjatĂ« ekzekutimit tĂ« operacioneve tĂ« shkruarjes gjatĂ« replikimit logjik.
- NĂ« instalimet e reja pĂ«rdorimi i kontrolleve tĂ« shumave pĂ«r verifikimin e integritetit tĂ« tĂ« dhĂ«nave tĂ« ruajtura Ă«shtĂ« pĂ«rfshirĂ« si parazgjedhje. PĂ«r tĂ« anuluar kĂ«tĂ« sjellje gjatĂ« nisjes sĂ« initdb duhet tĂ« specifikohet opsioni "âno-data-checksums".
- NĂ« utilitarin pg_createsubscriber Ă«shtĂ« shtuar flag-u "âall" pĂ«r tĂ« krijuar replikat logjike njĂ«herĂ«sh pĂ«r tĂ« gjitha DB-tĂ«.
- ĂshtĂ« realizuar njĂ« version i ri (3.2) i protokollit, i pĂ«rdorur pĂ«r ndĂ«rveprimin e mjeteve tĂ« jashtme me DBMS-nĂ« dhe i realizuar nĂ« bibliotekĂ«n libpq. PĂ«rditĂ«simi i fundit i protokollit u krye nĂ« PostgreSQL 7.4 (viti 2003). NĂ« bibliotekĂ«n libpq vazhdon tĂ« pĂ«rdoret si version default versioni 3.0.
Burimi: opennet.ru
