Un RDBMS libero: PostgreSQL by Federico Campoli Un RDBMS libero: PostgreSQL Pagina 1 Copyright (c) 2004 FEDERICO CAMPOLI - [email protected] Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. You can download a version of the license at url http://www.gnu.org/licenses/fdl.txt Un RDBMS libero: PostgreSQL Pagina 2 Generalita' sui database Panoramica su PostgreSQL Installazione database via ricompilazione Amministrazione dell'istanza Confronto tra Postgres e altri database Il futuro di Postgres (versione 8.0) Un RDBMS libero: PostgreSQL Pagina 3 Generalita' sui database relazionali Generalita' sui database Pagina 4 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 5 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 6 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 7 ● ● ● ● ● ● ● ● 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 8 Istanza PostgreSQL Postmaster Cluster database Panoramica su PostgreSQL Pagina 9 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 10 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'interndo del cluster e' presente il file di inizializzazione Per funzionare al meglio deve risiedere su filesystem con blocchi da 8k Al suo interno risiede il catalogo di sistema, i template dei database e i database E' possibile crare un'area dati aggiuntiva separata da quella primaria con il programma initlocation (databasespace) Panoramica su PostgreSQL Pagina 11 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 12 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 13 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 Viene adoperato l'algoritmo genetico per la risoluzione del piano di esecuzione L'executor processa il piano selezionato dal planner/optimizer e restituisce i risultati al processo server. Panoramica su PostgreSQL Pagina 14 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 15 Installazione database via ricompilazione Installing Postgresql Pagina 16 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 ● Installing Postgresql Pagina 17 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). ● Installing Postgresql Pagina 18 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 ● Installing Postgresql Pagina 19 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 Installing Postgresql Pagina 20 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 stoppare il database system. Se la variabile di ambiente PGDATA e' valorizzata richiede, come parametro, solo il comando da eseguire. Amministrazione istanza Pagina 21 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 22 PostgreSQL e altri..... Access ● ● ● ● ● ● ● ● ● ● 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 23 PostgreSQL e altri..... Mysql ● ● ● ● ● ● ● ● ● ● 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 Non possiede funzioni di replica Backup sottoforma di comandi SQL Lock in lettura a livello di riga PostgreSQL vs $nome_db Pagina 24 PostgreSQL e altri..... Oracle ● ● ● ● ● ● ● ● ● ● Database Server Ha dizionario dati Non ha problemi con connessioni multiple Foreign keys Possiede le Viste Linguaggio procedurale PL/SQL Tablespaces Funzionalita' di replica efficiente Modalita' di backup a caldo e freddo estremamente raffinata e funzionale Lock in scrittura PostgreSQL vs $nome_db Pagina 25 PostgreSQL e altri..... PostgreSQL Connessioni su socket unix e TCP (non attive di default) ● Ha dizionario dati ● Non ha problemi con connessioni multiple ● Foreign keys ● Possiede le Viste ● Linguaggi procedurali PL/pgSQL, PL/Tcl , PL/Perl, PL/Python ● Database space (datadir addizionale) ● Backup a caldo con pgdump come SQL o binario, a freddo con copia datadir ● Funzionalita' di replica via plugin esterno (SLONY) ● Multiversion Concurrency Control ● PostgreSQL vs $nome_db Pagina 26 l futuro di PostgreSQL (ver. 8) ● ● ● ● ● Tablespaces Savepoints nelle transazioni Log Archiver Windows port Point In Time Recovery Il futuro di PostgreSQL Pagina 27 Un RDBMS libero: PostgreSQL by Federico Campoli Un RDBMS libero: PostgreSQL Pagina 28