După un an de dezvoltare, o nouă ramură stabilă a SGBD-ului PostgreSQL 17 a fost publicată. Actualizările pentru noua ramură vor fi disponibile timp de cinci ani, până în noiembrie 2029. Suportul pentru PostgreSQL 12.x, cea mai veche dintre ramurile suportate, se va încheia pe 14 noiembrie.
Noutăți principale:
- În timpul operațiunii VACUUM (colectarea deșeurilor, curățarea și ambalarea stocării pe disc) a fost implicată o nouă structură de date, care consumă de până la 20 de ori mai puțină memorie. Trecerile la noua structură au permis accelerarea operațiunilor VACUUM și reducerea consumului de resurse partajate.
- Optimizarea performanței input/output a fost continuată. Datorită îmbunătățirii codului pentru procesarea jurnalului de înregistrare întârziată WAL, a fost posibilă o creștere de până la două ori a lățimii de bandă a operațiunilor de scriere în sistemele cu un număr mare de interogări simultane. A fost propusă o nouă interfață de flux de date, care a permis creșterea vitezei de parcurgere secvențială a datelor în tabele și accelerarea actualizării statisticilor pentru planificatorul de interogări după executarea operațiunii ANALYZE.
- Performanța interogărilor cu expresia „IN” a fost îmbunătățită atunci când sunt utilizate indecși pe baza structurii B-tree. A fost implementată posibilitatea construirii paralele a indecșilor BRIN (Block Range Index). În planificatorul de interogări, au fost optimizate verificările „NOT NULL” și a fost accelerată procesarea expresiilor tabelare comune (Common Table Expression, CTE) definite prin comanda SQL „WITH”. A fost asigurat utilizarea instrucțiunilor procesorului vectorial (SIMD) pentru accelerarea unor calcule, de exemplu, instrucțiile AVX-512 au fost folosite pentru a accelera funcția bit_count.
- A fost implementat suportul pentru noi funcționalități de lucru cu formatul JSON, definite în standardul SQL/JSON. A fost adăugată funcția JSON-TABLE pentru conversia datelor din formatul JSON în tabelele obișnuite PostgreSQL, precum și noi operatori jsonpath pentru conversia datelor JSON în tipuri de date native pentru PostgreSQL. Au fost propuse noi funcții pentru crearea (JSON, JSON_SCALAR și JSON_SERIALIZE) și interogarea (JSON_EXISTS, JSON_QUERY și JSON_VALUE) datelor în format JSON.
- Funcționalitatea comenzii SQL „MERGE” a fost extinsă, permițând crearea de expresii SQL condiționale care combină operațiuni de INSERT, UPDATE și DELETE într-o singură expresie. A fost adăugată suport pentru expresia RETURNING, care permite calcularea și returnarea valorilor pe baza rândurilor adăugate, actualizate sau șterse. Suportul pentru actualizarea vizualizărilor a fost implementat.
- Funcționalitatea de încărcare și export de date în mod lot a fost extinsă. Viteza de export a fost dublată pentru comanda COPY pentru rânduri mari, iar copierea a fost optimizată atunci când codările de sursă și cele țintă coincid. A fost adăugată opțiunea ON_ERROR, care permite continuarea importului după erori la inserarea datelor.
- Pentru tabelele secționate, a fost adăugată posibilitatea de a utiliza coloane cu identificatori unici și suport pentru tehnica de optimizare a interogărilor „Constraint exclusion”.
- În mecanismul de conectare a tabelelor externe Foreign Data Wrapper (postgres_fdw) a fost implementată capacitatea de a transmite la extern serverul subinterogări „EXISTS” și „IN.”
- A fost realizat un motor independent de platformă încorporat pentru procesarea proprietăților locale „Collation”, folosite pentru stabilirea regulilor de sortare și metodele de corespondență având în vedere semnificația caracterelor (de exemplu, la sortarea valorilor numerice se ține cont de prezența minusculei și a punctului înainte de număr și de diferitele moduri de scriere, iar la comparație nu se ia în considerare cazul literelor și prezența semnului de accent). Noua soluție garantează un comportament unitar la sortarea rezultatelor interogărilor, independent de platforma pe care este rulat PostgreSQL.
- În mecanismul de replicare logică, care permite transmiterea pe un alt server a modificărilor efectuate în baza de date în timpul adăugării, ștergerii sau actualizării înregistrărilor, procesul de actualizare a SGBD-ului a fost simplificat. Dacă anterior, la trecerea la o versiune semnificativă nouă, era necesar să se elimine sloturile de replicare logică și să se resincronizeze datele, acum este posibil să se evite ștergerea sloturilor. Pentru configurațiile rezistente la defecte, a fost realizată posibilitatea de gestionare a comutării către serverul de rezervă (failover) pentru replicarea logică. A fost adăugată o nouă utilitară pg_createsubscriber pentru a transforma o replică fizică într-o nouă replică logică.
- A fost adăugată o nouă opțiune «sslnegotiation» pentru negocierea directă a conexiunilor TLS securizate folosind extensia ALPN.
- A fost implementată o rol predeterminată pg_maintain, oferind utilizatorului dreptul de a efectua operațiuni legate de întreținerea SGBD.
- Utilitarul pg_basebackup, utilizat pentru crearea rezervelor de date, a fost actualizat cu suport pentru backup-uri incrementale. Pentru reconstrucția unui backup complet dintr-un set de copii incrementale, a fost propus un nou utilitar pg_combinebacku. De asemenea, utilitarul pg_dump a fost îmbogățit cu opțiunea «—filter» pentru selectarea obiectelor incluse în dump.
- În analiza cererilor cu comanda SQL «EXPLAIN» a fost implementată afișarea timpului petrecut pentru citirea și scrierea blocurilor locale în timpul I/O. Comanda «EXPLAIN» a fost de asemenea dotată cu două noi opțiuni «MEMORY» și «SERIALIZE», prin care se poate determina dimensiunea memoriei folosite și timpul petrecut pentru transformarea datelor pentru transmiterea prin rețea.
- A fost asigurată indicarea progresului operației VACUUM cu indecși.
- A fost adăugată o viziune sistemică pg_wait_events, care împreună cu viziunea pg_stat_activity permite o examinare mai detaliată a motivelor pentru care sesiunile active sunt în stare de așteptare.
Sursa: opennet.ro
