Il gruppo di sviluppatori di PostgreSQL ha annunciato il rilascio di PostgreSQL 12, l'ultima versione del sistema di gestione di database relazionali open source.
In PostgreSQL 12 è stata notevolmente migliorata la performance delle query, in particolare per il lavoro con grandi volumi di dati, e sono stati ottimizzati anche l'uso dello spazio su disco in generale.
Tra le nuove funzionalità:
- implementazione del linguaggio di query JSON Path (una parte fondamentale dello standard SQL/JSON);
- ottimizzazione dell'esecuzione delle common table expressions (WITH);
- supporto per colonne generate
Inoltre, la comunità continua a lavorare sull'estensibilità e sull'affidabilità di PostgreSQL, sviluppando il supporto per l'internazionalizzazione, le opzioni di autenticazione e fornendo percorsi più semplici per l'amministrazione del sistema.
In questa versione è stata implementata un'interfaccia per i motori di archiviazione plug-in, che consente agli sviluppatori di creare i propri metodi di archiviazione dei dati.
Miglioramenti delle prestazioni
PostgreSQL 12 include miglioramenti significativi nella performance e nelle procedure di manutenzione per i sistemi di indicizzazione e partizionamento.
Gli indici B-tree, il tipo di indicizzazione standard in PostgreSQL, sono stati ottimizzati nella versione 12 per carichi che prevedono frequenti modifiche agli indici. L'uso del test di riferimento TPC-C per PostgreSQL 12 ha mostrato una riduzione dell'uso dello spazio di circa il 40% e un incremento generale delle performance delle query.
Le query su tabelle partizionate hanno ricevuto miglioramenti significativi, soprattutto per tabelle costituite da migliaia di sezioni, e che operano solo su parti limitate degli array di dati. È stata migliorata la performance dell'aggiunta di dati alle tabelle partizionate tramite INSERT e COPY, così come la possibilità di collegare una nuova sezione senza bloccare le query in esecuzione.
In PostgreSQL 12 sono stati apportati ulteriori miglioramenti all'indicizzazione, che influenzano la performance generale, tra cui:
- riduzione dei costi nella generazione di WAL per i tipi di indici GiST, GIN e SP-GiST;
- possibilità di creare quelli che vengono chiamati indici coprenti (covering indexes, proposta INCLUDE) sugli indici GiST;
- possibilità di eseguire query "vicino ai vicini" (k-NN search) utilizzando l'operatore della distanza () e impiegando indici SP-GiST;
- supporto per la raccolta di statistiche sui valori più comuni (most-common value, MCV) tramite CREATE STATISTICS, che aiuta a ottenere i migliori piani di esecuzione delle query quando si utilizzano colonne i cui valori sono distribuiti in modo non uniforme.
La compilazione JIT utilizzando LLVM, introdotta in PostgreSQL 11, è ora attivata per impostazione predefinita. La compilazione JIT migliora le prestazioni con le espressioni nelle clausole WHERE, nelle liste di selezione, negli aggregati e in alcune operazioni interne. È disponibile se hai compilato PostgreSQL con LLVM o stai utilizzando un pacchetto PostgreSQL creato con LLVM abilitato.
Miglioramenti alle capacità del linguaggio SQL e alla compatibilità con lo standard
In PostgreSQL 12 è stata introdotta la possibilità di eseguire query su documenti JSON utilizzando espressioni di percorso JSON definite dallo standard SQL/JSON. Queste query possono utilizzare i meccanismi di indicizzazione esistenti per documenti memorizzati in formato JSONB, per un'estrazione dei dati efficiente.
Le Common Table Expressions, note anche come query con WITH, in PostgreSQL 12 possono ora essere eseguite automaticamente con sostituzione, il che può migliorare le prestazioni di molte query esistenti. Nella nuova versione, una parte della query WITH può essere eseguita con sostituzione solo se non è ricorsiva, non ha effetti collaterali e viene citata solo una volta nella parte successiva della query.
In PostgreSQL 12 viene introdotto il supporto per i "colonne generate". Definito dallo standard SQL, questo tipo di colonna calcola il valore in base al contenuto di altre colonne nella stessa tabella. In questa versione, PostgreSQL supporta le "colonne generate persistenti", in cui il valore calcolato è memorizzato su disco.
Internazionalizzazione
PostgreSQL 12 amplia il supporto per le corrispondenze ICU, consentendo agli utenti di definire "corrispondenze non determinate", che possono ad esempio consentire confronti senza distinzione tra maiuscole e minuscole o accenti.
Autenticazione
PostgreSQL espande il suo supporto per metodi di autenticazione sicuri con diversi miglioramenti che forniscono maggiore sicurezza e funzionalità. In questa versione è stata introdotta la crittografia lato client e server per l'autenticazione tramite interfacce GSSAPI e la possibilità di PostgreSQL di rilevare. servers LDAP, se PostgreSQL è stato compilato con OpenLDAP.
Inoltre, PostgreSQL 12 supporta ora una versione dell'autenticazione multifattoriale. Ora il server PostgreSQL può richiedere al client di fornire un certificato valido SSL-con il relativo nome utente utilizzando clientcert=verify-full, e combinarlo con una richiesta separata per il metodo di autenticazione (ad esempio, scram-sha-256).
Amministrazione
In PostgreSQL 12 è stata introdotta la possibilità di eseguire un ripristino non bloccante degli indici utilizzando il comando REINDEX CONCURRENTLY. Questo consente agli utenti di evitare interruzioni nel funzionamento del DBMS durante il lungo ripristino degli indici.
Inoltre, in PostgreSQL 12 è possibile abilitare o disabilitare i checksum delle pagine in un cluster spento, utilizzando il comando pg_checksums. In precedenza, i checksum delle pagine — una funzione che aiuta a verificare l'integrità dei dati memorizzati su disco — potevano essere abilitati solo al momento dell'inizializzazione del cluster PostgreSQL con initdb.
Fonte: linux.org.ru
