Un RDBMS libero: PostgreSQL by Federico Campoli (neo@thezion.net) Un RDBMS libero: PostgreSQL Pagina 1
Generalita' sui database Panoramica su PostgreSQL Installazione database via ricompilazione Amministrazione dell'istanza Confronto tra Postgres e altri database Le novita' della versione 8.1 Un RDBMS libero: PostgreSQL Pagina 2
Generalita' sui database relazionali Generalita' sui database Pagina 3
DATABASE RELAZIONALE Relational DataBase Management System (RDBMS) I dati sono rappresentati tramite tabelle I database relazionali vengono gestiti attraverso un linguaggio di alto livello, SQL (Structured Query Language). L'RDBMS si occupa dell'archiviazione e dell'integrita' dei dati Generalita' sui database Pagina 4
Il linguaggio SQL SQL, Structured Query Language Permette di agire sull'rdbms in maniera totalmente trasparente Consiste in un insieme ristretto di parole chiave in inglese Esistono vari dialetti a seconda dell'rdbms Attraverso l'sql l'rdbms opera sui dati senza che l'utente debba sapere come ne avviene la gestione Generalita' sui database Pagina 5
Panoramica su PostgreSQL Storia del database relazionale Struttura e funzionamento istanza Il catalogo di sistema Esecuzione di una query Caratteristiche di PostgreSQL Panoramica su PostgreSQL Pagina 6
Nasce nel 1977 all'universita' di Berkeley col nome di INGRES Si evolve nel 1986 come The Berkeley POSTGRES Project Leader del progetto e' il Professor Michael Stonebraker Nel 1994 Andrew Yu and Jolly Chen integrano un interprete SQL al progetto che viene rilasciato col nome Postgres95 Il motore di Postgres95 viene scritto interamente in ANSI C Postgres95 1.0.x e' il 30-50% piu veloce di POSTGRES 4,2 Postgres95 viene rilasciato come progetto open source Dal 1996 viene adottato il nome PostgreSQL Panoramica su PostgreSQL Pagina 7
Postmaster Istanza PostgreSQL Cluster database Panoramica su PostgreSQL Pagina 8
Postmaster Processo padre che si occupa del funzionamento dell'rdbms Necessita, per essere avviato di un cluster database su filesystem Il posmaster resta in attesa di connessioni socket o TCP Le connessioni TCP sono opzionali e vanno abilitate allo startup Ogni richiesta di connessione al postmaster provoca l'avvio di un processo server (postgres) dedicato per la connessione avviatasi Le comunicazioni tra postmaster, cluster database e processi server avvengono via semafori e chiamate ipc Panoramica su PostgreSQL Pagina 9
Cluster database Directory su filesystem formattata per ospitare l'istanza Viene inizializzata con il programma initdb L'owner deve essere lo stesso del processo postmaster All'interno del cluster e' presente il file di inizializzazione postgresql.conf Per funzionare al meglio deve risiedere su filesystem con blocchi da 8k Al suo interno risiede il catalogo di sistema e i template dei database e i database utente Panoramica su PostgreSQL Pagina 10
Il catalogo di sistema Il catalogo di sistema e' costituito da un insieme di tabelle comuni a tutti database del cluster e dal dizionario dati Il dizionario dati si occupa del parsing dei comandi SQL (parser stage) e viene adoperato dal planner per la risoluzione del piano di esecuzione L'owner delle tabelle e' l'utente postgres che e' anche il super user del cluster database Gli utenti non privilegiati possono visualizzarne i dati attraverso delle viste di sistema Le viste di sistema vengono utilizzate per ottenere informazioni sul funzionamento del cluster. Panoramica su PostgreSQL Pagina 11
Le viste di sistema(cenni) pg_user vista di sistema che opera sulla tabella pg_shadow fornisce informazioni sugli utenti pg_tables tabella di sistema, fornisce informazioni sulle tabelle del cluster pg_settings tabella di sistema, fornisce informazioni sui parametri runtime dell'istanza pg_database tabella di sistema, fornisce informazioni sui database presenti nel cluster pg_statistic tabella di sistema, contiene le statistiche degli oggetti del cluster. Viene aggiornata durante le operazioni di analyze degli oggetti del cluster. Panoramica su PostgreSQL Pagina 12
Esecuzione di una query Il client si connette al database server Il processo server riceve la query che viene passata al parser Il parser costruisce il query tree Il planner/optimizer verifica i possibili piani di esecuzione L'executor processa il piano selezionato dal planner/optimizer e restituisce i risultati al processo server. Panoramica su PostgreSQL Pagina 13
Caratteristiche di PostgreSQL Data dictionary e catalogo di sistema Transazionale (richiede apertura esplicita delle transazioni) Funzionalita' di subquery Trigger Supporto per piu' linguaggi procedurali Possibilita' di implementare funzioni attraverso routine esterne scritte in C Viste Funzioni Cursori Trigger Multiversion Concurrency Control Panoramica su PostgreSQL Pagina 14
Installazione database via ricompilazione Installazione di Postgresql Pagina 15
Perche' ricompilare? Ricompilando si ottiene codice ottimizzato per il processore su cui dovrà girare il software. Si può adoperare sempre l'ultima release senza essere legati al rilascio dei pacchetti binari In fase di configurazione e' possibile specificare alcuni parametri che danno al database caratteristiche speciali come il supporto per il Python o la readline Installazione di Postgresql Pagina 16
Installazione via compilazione (1) Download dei sorgenti dal sito www.postgresql.org Creare un utente postgres e un gruppo postgres Decomprimere i sorgenti in una directory di appoggio e cambiarne l'ownership a postgres.postgres Diventare utente postgres e avviare la configurazione del source tree con./configure Qualora mancassero librerie necessarie alla compilazione installarle secondo le istruzioni della distribuzione che si sta utilizzando (rpm,dpkg, compilazione). Installazione di Postgresql Pagina 17
Installazione via compilazione (2) Compilare il database con make Al termine della compilazione eseguire il regression test con make check Installare il database con make install Creare una directory con ownership postgres.postgres e inizializzarla con initdb -D <data_dir> Impostare le variabili di ambiente PATH e PGDATA per il corretto startup del processo postmaster Installazione di Postgresql Pagina 18
Installazione via compilazione (3) Avviare il database system con pg_ctl postgres@debianworkstation:~$ pg_ctl start postmaster successfully started postgres@debianworkstation:~$ LOG: could not create IPv6 socket: Address family not supported by protocol LOG: database system was shut down at 2004-11-09 23:24:17 CET LOG: checkpoint record is at 0/A7DBB4 LOG: redo record is at 0/A7DBB4; undo record is at 0/0; shutdown TRUE LOG: next transaction ID: 797; next OID: 17151 LOG: database system is ready Installazione di Postgresql Pagina 19
Amministrazione dell'istanza L'istanza viene amministrata sia come processo che come servizio Il processo viene avviato chiamando direttamente postmaster passandogli il parametro datadir Il servizio (piu' funzionale in un contesto server) viene gestito dal programma pg_ctl che permette di avviare o di arrestare il database. Se la variabile di ambiente PGDATA e' valorizzata richiede, come parametro, solo il comando da eseguire. Amministrazione istanza Pagina 20
Amministrazione dell'istanza pg_ctl start avvia l'istanza pg_ctl stop ferma l'istanza L'opzione -m indica la modalita' di shutdown che puo' avvenire in 3 modalita' smart attende che le connessioni siano terminate per chiudere l'istanza fast chiude le connessioni esegue il rollback delle transazioni non committate e poi chiude l'istanza immediate termina tutti i processi server e il postmaster lasciando il cluster dirty. Dopo uno shutdown immediate durante lo startup si ha il recovery dell'istanza kill -9 postmaster e' male! Amministrazione istanza Pagina 21
Access PostgreSQL e altri... Non e' un database server Non ha dizionario dati Instabile sopra le 10 connessioni concorrenti Ha foreign keys Ha viste (query) Ha un SDK per interfacce form Non permette una gestione ottimale dello spazio disco Non possiede funzioni di replica Backup solo a freddo (copia file mdb) Lock in lettura a livello di riga PostgreSQL vs $nome_db Pagina 22
Mysql PostgreSQL e altri... Ha un demone server in ascolto su connessioni TCP Non ha dizionario dati Non ha problemi con connessioni multiple Foreign keys attivabili solo con tabelle innodb Non ha viste Non ha nessun tipo di linguaggio procedurale o SDK Datadir unica Backup sottoforma di comandi SQL Lock in lettura a livello di riga PostgreSQL vs $nome_db Pagina 23
Oracle PostgreSQL e altri... Database Server Ha dizionario dati Non ha problemi con connessioni multiple Foreign keys Possiede le Viste Linguaggio procedurale PL/SQL Tablespaces Modalita' di backup a caldo e freddo automatizzato Lock in scrittura PostgreSQL vs $nome_db Pagina 24
PostgreSQL PostgreSQL e altri... Connessioni su socket unix e TCP Ha dizionario dati Non ha problemi con connessioni multiple Foreign keys Possiede le Viste Linguaggi procedurali PL/pgSQL, PL/Tcl, PL/Perl, PL/Python Tablespace Backup con export dati o con PITR (Modalita' archivelog) Multiversion Concurrency Control PostgreSQL vs $nome_db Pagina 25
Le novita' della versione 8.1.x Log Archiver Windows port Point In Time Recovery Contraint Exclusion (Table Partitioning) Procedure Autovacuum 2 phase commit Tablespaces Bitmap Index Savepoints nelle transazioni Le novita' della versione 8.1 Pagina 26
Le tablespaces Una tablespace e' una locazione logica interna al database dove collocare oggetti eterogenei. Alla locazione logica fa da controparte una locazione fisica univoca. E' quindi possibile scegliere dove posizionare gli oggetti di database singolarmente. Per creare una tablespace (necessita di diritti superuser) CREATE TABLESPACE tablespacename [ OWNER username ] LOCATION 'directory'; Una volta creata la tablespace non e' possibile cambiare la LOCATION. E' pero' possibile cambiare l'owner e il nome con i comandi ALTER TABLESPACE name RENAME TO newname; ALTER TABLESPACE name OWNER TO newowner; Le novita' della versione 8.1 Pagina 27
Savepoints nelle transazioni I savepoints sono una sorta di bookmark all'interno delle transazioni. Prima della versione 8 postgresql supportava solo questa sintassi per le transazioni. BEGIN; UPDATE accounts SET balance = balance - 100.00 WHERE name = 'Alice'; UPDATE accounts SET balance = balance + 300.00 WHERE name = 'Bianconiglio'; COMMIT; (o ROLLBACK;) Il rollback poteva essere eseguito solo su tutto il blocco transazionale. Le novita' della versione 8.1 Pagina 28
Savepoints nelle transazioni Dalla versione 8 in poi e' possibile avere una sintassi del genere BEGIN; UPDATE accounts SET balance = balance - 100.00 WHERE name = 'Alice'; SAVEPOINT Bianconiglio; UPDATE accounts SET balance = balance + 300.00 WHERE name = 'Bianconiglio'; ROLLBACK TO Bianconiglio; UPDATE accounts SET balance = balance - 300.00 WHERE name = 'Bianconiglio'; COMMIT; Le novita' della versione 8.1 Pagina 29
Bitmap Index Un indice bitmap e' una mappa di bit che descrive le occorrenze dei singoli valori presenti in una colonna Bitmap su Colonna Sesso Nome Sesso M F Federico M 1 0 Luigi M 1 0 Anna F 0 1 Maurizio M 1 0 Sabrina F 0 1 Elena F 0 1 Pregi Velocissimo negli join Estremamente compatto Utilissimo per sostituire gli indici compositi Difetti Richiede tempo e risorse per la creazione Negli update letteralmente sdraia il server Le novita' della versione 8.1 Pagina 30
Bitmap Index PostgreSQL introduce gli indici bitmap dalla versione 8.1 La sua implementazione e' quantomai originale NEL CLUSTER DATABASE NON ESISTONO INDICI BITMAP NE E' POSSIBILE CREARLI L'ottimizzatore nella risoluzione del piano, SE RITIENE OPPORTUNO, e' in grado di trasformare al volo un indice B-TREE in un bitmap con un costo accettabile. In questo modo si riduce drasticamente la necessita' di avere indici compositi sulle colonne. Le novita' della versione 8.1 Pagina 31
Webografia http://www.postgresql.org/ http://www.psql.it/ http://pgfoundry.org/projects/my2postgres/ http://www.google.com Un RDBMS libero: PostgreSQL Pagina 32
Tu sei libero: * di riprodurre, distribuire, comunicare al pubblico, esporre in pubblico, rappresentare, eseguire e recitare quest'opera * di modificare quest'opera Alle seguenti condizioni: Devi attribuire la paternità dell'opera nei modi indicati dall'autore o da chi ti ha dato l'opera in licenza. Non puoi usare quest'opera per fini commerciali. sa Se alteri o trasformi quest'opera, o se la usi per crearne un'altra, puoi distribuire l'opera risultante solo con una licenza identica a questa. * Ogni volta che usi o distribuisci quest'opera, devi farlo secondo i termini di questa licenza, che va comunicata con chiarezza. * In ogni caso, puoi concordare col titolare dei diritti d'autore utilizzi di quest'opera non consentiti da questa licenza. Le utilizzazioni consentite dalla legge sul diritto d'autore e gli altri diritti non sono in alcun modo limitati da quanto sopra. Questo è un riassunto in linguaggio accessibile a tutti del Codice Legale. Testo integrale della licenza disponibile all'indirizzo http://creativecommons.org/licenses/by-nc-sa/2.5/it/legalcode Licenza Pagina 33
Un RDBMS libero: PostgreSQL by Federico Campoli (neo@thezion.net) Un RDBMS libero: PostgreSQL Pagina 34