Da Berkeley al database enterprise
Le origini di PostgreSQL risalgono al 1986, quando il professor Michael Stonebraker avvia il progetto POSTGRES all’Università della California, Berkeley, come successore del database relazionale Ingres. L’obiettivo è esplorare concetti avanzati: tipi di dati personalizzati, ereditarietà delle tabelle e un sistema di regole estensibile. Nel 1996 il progetto accademico diventa PostgreSQL, un database open source gestito da una comunità internazionale di sviluppatori.
Con il rilascio della versione 8.3 nel febbraio 2008, PostgreSQL consolida la propria posizione come uno dei database relazionali open source più completi dal punto di vista funzionale.
MVCC e integrità dei dati
Il motore di concorrenza di PostgreSQL si basa su MVCC (Multi-Version Concurrency Control). Ogni transazione opera su uno snapshot consistente dei dati: le letture non bloccano le scritture e le scritture non bloccano le letture. Questo approccio elimina la necessità di lock espliciti nella maggior parte dei casi d’uso, garantendo prestazioni elevate anche sotto carico concorrente intenso.
PostgreSQL implementa tutti e quattro i livelli di isolamento dello standard SQL e supporta vincoli complessi: foreign key, check constraint, unique constraint e exclusion constraint. L’integrità dei dati non è opzionale — è un principio di design.
Le novità della versione 8.3
La versione 8.3 introduce miglioramenti significativi:
- HOT updates (Heap-Only Tuple): quando un aggiornamento non modifica colonne indicizzate, PostgreSQL evita di aggiornare gli indici, riducendo drasticamente l’I/O nelle tabelle con aggiornamenti frequenti
- Full-text search integrato nel core: le funzionalità di ricerca testuale, precedentemente disponibili come modulo esterno tsearch2, sono ora parte del database. Vettori tsvector, query tsquery, indici GIN e GiST per la ricerca full-text sono strumenti nativi
- Miglioramenti al query planner e supporto per bitmap index scan su query complesse
Estensibilità come principio
Ciò che distingue PostgreSQL dagli altri database relazionali è la profondità della sua estensibilità. Gli utenti possono definire tipi di dati personalizzati, operatori, funzioni di aggregazione, metodi di indicizzazione e linguaggi procedurali. PL/pgSQL è il linguaggio procedurale nativo per scrivere stored procedure e trigger, ma PostgreSQL supporta anche PL/Python, PL/Perl e PL/Tcl.
Questa architettura estensibile permette di adattare il database a domini specifici senza modificarne il core. I tipi geometrici, il supporto per gli array e la capacità di definire domini custom sono esempi di una filosofia progettuale che privilegia la completezza e la correttezza rispetto alla semplicità.
PostgreSQL non è mai stato il database più veloce nelle operazioni semplici né il più facile da configurare. È il database che rifiuta i compromessi sull’integrità dei dati e sulla conformità allo standard SQL.
Link: postgresql.org
