La versione PostgreSQL 17 introduce nuove funzionalita' all'RDBMS Open Source piu' avanzato ed oggi [NdA 2024-04-01] e' il giorno giusto per parlarne: ecco quindi pubblicato questo documento!
In generale la versione 17 e' un'evoluzione della versione precedente con nuove funzionalita' (eg. logon trigger) ma anche con migliori prestazioni ed un costante miglioramento degli aspetti di gestione delle basi dati.
In questo documento sono riportati in dettaglio i principali nuovi elementi introdotti nella versione 17 riportando esempi pratici di utilizzo:
Ma le novita' non sono solo queste... continuate a leggere!
Al comando pg_basebackup e' stata aggiunta l'opzione --incremental=PATH_TO_MANIFEST
per supportare backup fisici incrementali.
Il nuovo comando pg_combinebackup consente di ricostruire la data directory
partendo da un full backup ed applicando tutti i backup incrementali.
Per utilizzare questa funzionalita' e' necessario impostare summarize_wal = on
che e' un parametro che richiede il solo reload della configurazione.
Postgres consente da tempo il Point in time recovery (PITR) con l'applicazione dei WAL... pero' vi sono casi di database di modeste dimensioni ma con un forte uso di transazioni in cui l'applicazione dei WAL e' molto onerosa. Il pg_basebackup incrementale puo' essere molto utile in questi casi.
Agli event trigger e' stato aggiunto l'evento di login che consente di eseguire azioni al momento della connessione dell'utente.
In realta' il comando ALTER USER ... SET gia' copriva molte delle esigenze di configurazione delle utenze in Postgres ma con il trigger e' possibile una maggior dinamicita' nelle impostazioni.
CREATE TABLE user_login_log ( "user" text, "session_start" timestamp with time zone ); CREATE OR REPLACE FUNCTION init_session() RETURNS event_trigger SECURITY DEFINER LANGUAGE plpgsql AS $$ DECLARE hour integer = EXTRACT('hour' FROM current_time at time zone 'utc'); rec boolean; BEGIN IF hour BETWEEN 4 AND 5 THEN RAISE EXCEPTION 'Login forbidden'; END IF; IF hour BETWEEN 1 AND 6 THEN RAISE WARNING E'Insomniac user connected: \n %', session_user; END IF; -- Avoid secondary... SELECT pg_is_in_recovery() INTO rec; IF rec THEN RETURN; END IF; INSERT INTO public.user_login_log VALUES (session_user, current_timestamp); END; $$; CREATE EVENT TRIGGER init_session ON login EXECUTE FUNCTION init_session(); ALTER EVENT TRIGGER init_session ENABLE ALWAYS;
A lungo attesi sono stati finalmente aggiunti il privilege
MAINTAIN ed il ROLE pg_maintain.
Con il privilegio MANTAIN su una tabella e' possibile
eseguire i comandi VACUUM, ANALYZE, REINDEX,
REFRESH MATERIALIZE VIEW, CLUSTER, LOCK TABLE
che in precedenza erano riservati al solo proprietario della tabella o ai superutenti.
L'assegnazione del ruolo pg_maintain estende questo diritto su ogni tabella.
Con questi privilegi e' piu' semplice demandare attivita' di manutezione di tabelle evitando cosi' di dover distribuire i privilegi di amministratore o di proprietario di oggetti.
Alcune statistiche sul comportamento del processo di checkpoint in realta' erano gia' presenti nella vista di sistema pg_stat_bgwriter ma ora e' stata definita una nuova vista dedicata:
select num_timed, num_requested, buffers_written, write_time, sync_time, stats_reset from pg_stat_checkpointer;
Naturalmente e' stata modificata anche la vista pg_stat_bgwriter.
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 nuove funzionalita' per il trattamento dei JSON.
Nella versione PG17 vengono aggiunte nuove funzioni: JSON(), JSON_SCALAR(), JSON_SERIALIZE() le nuove funzioni di query: JSON_EXISTS(), JSON_QUERY(), JSON_VALUE() e la funzione JSON_TABLE() che trasforma i dati JSON in una tabella relazionale.
La logical replication e' un'importante funzionalita'
introdotta nella versione 10 che riceve continui aggiornamenti ed estensioni.
Dalla versione 17 e' possibile indicare, nello statement di CREATE o di ALTER,
l'ulteriore parametro failover che indica se e' possibile sincronizzare
i replication slot con gli standby.
L'impostazione di default e' false, quindi mantiene lo stesso comportamento
delle versioni precedenti. Con l'impostazione a true la replica logica potra'
proseguire anche in caso di switch sui secondari.
Quelle riportate fino ad ora non sono le uniche variazioni importanti della versione 17 di PostgreSQL. Altre novita' interessanti sono:
Avro' dimenticato qualcosa? Certamente si!
In realta' manca ancora qualcosa, perche'
la prevista aggiunta della funzione XML_PARSE_HUGE
per superare il limite di 10MB
supportato dal libxml2
e' stata poi ritirata per non essere sommersi da un
miliardo di risate!
Ecco il contenuto completo della
matrice delle nuove funzionalita'
di PostgreSQL 17:
April the 1st is too early!
Il riferimento finale e' la documentazione ufficiale [NdE per quando ci sara'... al momento documentazione e' in sviluppo] e l'ottimo prospetto riassuntivo di pgPedia.
PostgreSQL e' in costante evoluzione! Per il passato recente: le novita' della versione 16, 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 delle nuove versioni generalmente avvengono in corrispondenza all'ultimo rilascio delle minor releases dell'anno, che occorre il secondo giovedi di Novembre, ma sono possibili leggeri anticipi].
Oggi [NdA 2024-09-26] la versione PostgreSQL 17 e' stata rilasciata in produzione!
Non sono molte le variazioni rispetto alla versione iniziale di questa pagina... A mio avviso l'unica correzione di rilievo e' l'implementazione del comandi di MERGE e SPLIT delle partizioni la cui implementazione e' stata regredita in agosto. Peccato perche' sarebbero stati molto utili anche se utilizzavano lock esclusivi.
Titolo: PostgreSQL 17 - Nuove funzionalita'
Livello: Avanzato
Data: 1 Aprile 2024 🐟
Versione: 1.1.0 -
26 Settembre 2024
Autore:
mail [AT] meo.bogliolo.name