Dopo un anno di sviluppo, è stata pubblicata una nuova versione stabile del DBMS PostgreSQL 17. Gli aggiornamenti per la nuova versione verranno rilasciati per cinque anni fino a novembre 2029. Il supporto per PostgreSQL 12.x, la versione più vecchia tra quelle supportate, verrà interrotto il 14 novembre.
Novità principali:
- Durante l'operazione VACUUM (raccolta di spazzatura, pulizia e imballaggio dello storage su disco) è stata impiegata una nuova struttura dati che consuma fino a 20 volte meno memoria. Il passaggio alla nuova struttura ha permesso di accelerare l'esecuzione delle operazioni VACUUM e di ridurre il consumo di risorse condivise.
- È proseguita l'ottimizzazione delle performance di input/output. Grazie al miglioramento del codice per la gestione del log di scrittura differita WAL, è stata ottenuta una capacità di scrittura fino a due volte superiore nei sistemi con un alto numero di query simultanee. È stato proposto un nuovo interface di streaming I/O che ha migliorato la velocità di scansione sequenziale dei dati nelle tabelle e accelerato l'aggiornamento delle statistiche per il pianificatore di query dopo l'esecuzione dell'operazione ANALYZE.
- È stata aumentata la performance delle query con l'espressione 'IN', se utilizzano indici basati sulla struttura B-tree. È stata implementata la possibilità di costruzione parallela degli indici BRIN (Block Range Index). Nel pianificatore di query sono state ottimizzate le verifiche 'NOT NULL' e accelerata la gestione delle espressioni tabellari comuni (Common Table Expression, CTE) definite tramite il comando SQL 'WITH'. È stato garantito l'uso delle istruzioni SIMD per accelerare alcuni calcoli, ad esempio, per accelerare la funzione bit_count sono state utilizzate le istruzioni AVX-512.
- È stato implementato il supporto per nuove funzionalità relative al formato JSON, definite nello standard SQL/JSON. È stata aggiunta la funzione JSON-TABLE per la conversione dei dati dal formato JSON a normali tabelle PostgreSQL, così come nuovi operatori jsonpath per la conversione dei dati JSON nei tipi di dati nativi di PostgreSQL. Sono state proposte nuove funzioni per creare (JSON, JSON_SCALAR e JSON_SERIALIZE) e interrogare (JSON_EXISTS, JSON_QUERY e JSON_VALUE) dati nel formato JSON.
- Le funzionalità del comando SQL «MERGE» sono state ampliate, consentendo la creazione di espressioni SQL condizionali che combinano in un'unica espressione le operazioni di INSERT, UPDATE e DELETE. È stato aggiunto il supporto per l'espressione RETURNING, che consente di calcolare e restituire valori basati sulle righe aggiunte, aggiornate o eliminate. È stato implementato il supporto per l'aggiornamento delle viste.
- Le funzionalità di caricamento ed esportazione dei dati in modalità batch sono state ampliate. Nella comando COPY la velocità di esportazione di grandi righe è aumentata fino a due volte, è stata ottimizzata la copia quando ci sono corrispondenze tra la codifica sorgente e quella di destinazione, ed è stata aggiunta l'opzione ON_ERROR, che consente di continuare l'importazione dopo errori durante l'inserimento dei dati.
- Per le tabelle partizionate è stata aggiunta la possibilità di utilizzare colonne con identificatori univoci e il supporto per la tecnica di ottimizzazione delle query «Constraint exclusion».
- Nel meccanismo di collegamento delle tabelle esterne Foreign Data Wrapper (postgres_fdw) è stata realizzata la possibilità di trasmettere su un esterno server subquery «EXISTS» e «IN».
- È stato implementato un motore integrato indipendente dalla piattaforma per il trattamento delle proprietà della località «Collation», utilizzate per stabilire le regole di ordinamento e i metodi di confronto in base al significato dei caratteri (ad esempio, nell'ordinamento dei valori numerici viene presa in considerazione la presenza di un segno meno e di un punto prima del numero e diversi modi di scrittura, mentre nel confronto non si tiene conto del maiuscolo e della presenza di segni diacritici). Il nuovo motore garantisce un comportamento uniforme durante l'ordinamento dei risultati delle query, indipendentemente dalla piattaforma su cui viene eseguito PostgreSQL.
- Nel meccanismo di replica logica, che consente di trasmettere a un altro server le modifiche apportate al DB durante l'aggiunta, la rimozione o l'aggiornamento delle registrazioni, è stato semplificato il processo di aggiornamento del DBMS. Se in precedenza, al passaggio a una nuova versione significativa, era necessario eliminare gli slot di replica logica e rieseguire la sincronizzazione dei dati, ora è possibile evitare la rimozione degli slot. Per le configurazioni ad alta disponibilità è stata implementata la possibilità di gestire il commutamento su un server secondario (failover) per la replica logica. È stata aggiunta una nuova utility pg_createsubscriber per trasformare la replica fisica in una nuova replica logica.
- È stata aggiunta una nuova opzione «sslnegotiation» per la negoziazione diretta di connessioni TLS protette utilizzando l'estensione ALPN di TLS.
- È stata implementata un ruolo predefinito pg_maintain, che consente all'utente di eseguire operazioni legate alla manutenzione del DBMS.
- Nell'utilità pg_basebackup, usata per creare backup del database, è stato aggiunto il supporto per backup incrementali. Per ricostruire un backup completo da un insieme di copie incrementali, è stata proposta una nuova utilità pg_combinebacku. Nell'utilità pg_dump è stata aggiunta l'opzione «—filter» per selezionare gli oggetti da includere nel dump.
- Durante l'analisi delle query tramite il comando SQL «EXPLAIN», è stata implementata la visualizzazione del tempo impiegato per la lettura e la scrittura dei blocchi locali durante l'input/output. Al comando «EXPLAIN» sono state aggiunte anche due nuove opzioni «MEMORY» e «SERIALIZE», che consentono di determinare la dimensione della memoria utilizzata e il tempo impiegato per convertire i dati per la trasmissione in rete.
- È stata fornita un'indicazione del progresso dell'operazione VACUUM con gli indici.
- È stata aggiunta una vista di sistema pg_wait_events, che in combinazione con la vista pg_stat_activity consente di esaminare più nel dettaglio le ragioni per cui le sessioni attive si trovano in stato di attesa.
Fonte: opennet.ru
