PostgreSQL 16 - Nuove funzionalita'

La versione PostgreSQL 16 introduce nuove funzionalita' all'RDBMS Open Source piu' avanzato.
E' passato un anno dall'uscita della precedente release ed e' stata rilasciata la versione di produzione 16.0 [NdA 2023-09-14]: ecco quindi pubblicato anche questo documento!

In generale la versione 16 e' un'evoluzione della versione precedente con nuove funzionalita' (eg. SQL/JSON constructors) ma anche con migliori prestazioni ed un costante miglioramento della sicurezza.

In questo documento sono riportati in dettaglio i principali nuovi elementi introdotti nella versione 16 riportando esempi pratici di utilizzo:

Ma le novita' non sono solo queste... continuate a leggere!

SQL/JSON constructors and identity functions

Sono finalmente disponibili nuove funzioni per la gestione dei dati JSON in particolare: JSON_ARRAY(), JSON_ARRAYAGG() e IS JSON.

PostgreSQL supporta da tempo il formato JSON. Il datatype JSON e' stato introdotto nella 9.2 (2012-09), l'efficiente datatype JSOB nella 9.4 ed ogni nuova versione ha aggiunto delle funzionalita'.

Performance

Sono diverse i miglioramenti che hanno impatto per le prestazioni. Con la versione 16 e' possibile l'esecuzione parallela dei FULL e RIGHT joins, sono state fatte ottimizzazioni sulle window functions, e' utilizzato il sort incrementale sulle DISTINCT, ... insomma una serie di miglioramenti all'ottimizzatore ed agli algoritmi che rendono piu' veloci le query.

Il comando di COPY e' stato ottimizzato e presenta migliori prestazioni per i bulk load.

In realta' questa e' una componente esterna... ma ha comunque un potenziale impatto sulle prestazioni: ora la libpq (la libreria utilizzata per la connessione al database) permette di utilizzare piu' istanze in load balancing utilizzando il parametro di connessione load_balance_hosts [NdA il parametro di connessione per indentificare l'accesso al primary e' disponibile dalla 10 ed e' target_session_attrs].

Logical Replication

Sono interessanti le funzionalita' introdotte in PG16 per la logical replication.

Ora e' possibile effettuare la logical replication dagli standbys servers, liberando in questo modo il carico dall'istanza primaria. La logical replication puo' essere applicata in parallel, rendendo piu' veloce l'allineamento dei nodi su transazioni pesanti.

Con la versione 16 e' possibile configurare la bidirectional replication sfruttando l'impostazione origin=NONE della logical replication.

E' stato introdotto il pg_create_subscription role, che consente di creare sottoscrizioni alla replica logica anche ad utenti non amministratori.

Regular expression in pg_hba.conf and pg_ident.conf

Con la versione 16 e' possibile utilizzare espressioni regolari nella definizione degli accessi nei file pg_hba.conf e pg_ident.conf oltre ad utilizzare file di include.

Ecco un esempio ufficiale del file pg_hba.conf:

# Allow any user on the local system to connect using Unix-domain sockets
# to the database db1, db2 and any databases with a name beginning with "db"
# and finishing with a number using two to four digits (like "db1234" or
# "db12").
#
# TYPE  DATABASE                   USER            ADDRESS          METHOD
local   db1,"/^db\d{2,4}$",db2     all             localhost        trust

# If these are the only four lines for local connections, they will
# allow local users to connect only to their own databases (databases
# with the same name as their database user name) except for users whose
# name end with "helpdesk", administrators and members of role "support",
# who can connect to all databases.  The file $PGDATA/admins contains a
# list of names of administrators.  Passwords are required in all cases.
#
# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   sameuser        all                                     md5
local   all             /^.*helpdesk$                           md5
local   all             @admins                                 md5
local   all             +support                                md5

Varie ed eventuali

Quelle riportate fino ad ora non sono le uniche variazioni importanti della versione 16 di PostgreSQL. Altre novita' interessanti sono:

Avro' dimenticato qualcosa? Certamente si!
Ecco il contenuto della matrice delle funzionalita' di PostgreSQL 16:
pg_stat_io - I/O metrics view, ANY_VALUE aggregate, Non-decimal integer literals, SYSTEM_USER, Underscores (_) for thousands separators, Incremental sort for SELECT DISTINCT, Load balancing for libpq / psql, Parallel FULL and RIGHT joins, SIMD support for ARM, SIMD support for x86, SQL/JSON constructors, SQL/JSON IS JSON Logical replication avoids replication loops, Logical replication from standbys, Logical replication initial sync using binary protocol, Logical replication lookups with additional indexes, Logical replication parallel apply of transactions, Include directives for pg_hba.conf and pg_ident.conf, Regular expression matching in pg_hba.conf and pg_ident.conf Client-specified requirements for authentication, Kerberos credential delegation, Support using the client's OS trusted CA Page freezing optimizations, psql \bind.
Non c'e' solo questo: l'elenco completo riportato dalla documentazione ufficiale e l'ottimo prospetto riassuntivo di pgPedia.

In realta' manca ancora qualcosa, perche' non c'e' proprio nella versione 16... l'annunciato MAINTAIN privilege and pg_maintain role e' stato poi rimosso e probabilmente sara' disponibile solo con la prossima versione.

PostgreSQL e' in costante evoluzione!
Per il passato... ecco le novita' della versione 15 mentre un documento completo con le versioni di tutti i Software che ritengo piu' significativi, ed ovviamente anche di PostgreSQL, e' il famigerato Il tuo server puzza!
Per il futuro... in realta' il futuro di PostgreSQL e' gia' adesso perche' gli sviluppi per la versione 17 sono gia' iniziati [NdA 2023-07] ed ad aprile 2024 si arrivera' al Feature Freeze in cui vengono fissate le nuove funzionalita' che verranno aggiunte nella versione. Arriveranno quindi le prime Beta e quindi una o piu' RC (Release Candidate) a seconda delle necessita'. Probabilmente un poco prima, ma quasi sicuramente entro il 2024-11 la nuova versione PG17 sara' disponibile come produzione [NdA i rilasci avvengono in corrispondenza al secondo giovedi di Novembre, giorno di rilascio delle minor releases, ma sono possibili leggeri anticipi o ritardi per le nuova release].


Titolo: PostgreSQL 16 - Nuove funzionalita'
Livello: Avanzato (3/5)
Data: 14 Settembre 2023
Versione: 1.0.2 - 31 Ottobre 2023
Autore: mail [AT] meo.bogliolo.name