Un RDBMS libero: PostgreSQL by Federico Campoli

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