Laboratorio Di Basi Di Dati 03 Il D B M S Postgre S Q L
1. Corso di Basi di Dati e Laboratorio
PostgreSQL
Alfio Ferrara - Stefano Montanelli
A.A. 2005/2006 Basi di Dati e Laboratorio 1
Introduzione
• PgSQL
– http://www.postgresql.org
– DBMS relazionale Open Source (licenza GPL)
– Applicazione Client – Server
– La distribuzione consiste in un server e una
applicazione client da riga di comando (pgsql)
– Disponibili diversi script di amministrazione
(initdb, pgdump, …)
A.A. 2005/2006 Basi di Dati e Laboratorio 2
Supporto allo standard
• Postgres supporta ampiamente lo standard
SQL99
• Complex queries, Foreign keys, Triggers, Views,
Transactional integrity, Multiversion concurrency
control
• Estensioni
• Data types
• Functions
• Operators
• Aggregate functions
• Index methods
• Procedural languages
A.A. 2005/2006 Basi di Dati e Laboratorio 3
1
2. Avvio del servizio
• Il servizio è avviato dall’istruzione:
– postmaster -D /path/cluster -i
Avvio del servizio Accetta connessioni non locali
Directory di memorizzazione fisica
• Il server può gestire più database e essere
associato a un cluster specifico
A.A. 2005/2006 Basi di Dati e Laboratorio 4
Inizializzare un cluster
• Creare una directory (/path/cluster) con su
cui l’utente amministratore (postgres) abbia
i permessi in lettura/scrittura
– initdb -D /path/cluster
• Si possono creare utenti e database senza
utilizzare il client psql
– createuser test / dropuser test
– createdb testdb / dropdb testdb
A.A. 2005/2006 Basi di Dati e Laboratorio 5
Stato iniziale
• Inizialmente sono presenti i database
template0 e template1
• Essi sono utilizzati come template per la
creazione di nuovi database
• È possibile creare un proprio template
come base per la generazione di nuovi
database
A.A. 2005/2006 Basi di Dati e Laboratorio 6
2
3. Uso del client psql
• psql template1[-h host -U utente]
– Se omesso viene assunto l’utente corrente e se
omesso il db si assume che il db abbia lo stesso nome
dell’utente
• I comandi sono distinti in due tipologie:
– Comandi del client: preceduti da
– Comandi SQL
• Help in linea
– ?[comando]: help sui comandi del client
– h[comando]: help su sql
• Altri comandi utili
– l lista dei db, d descrittore, dt elenco tabelle, etc.
A.A. 2005/2006 Basi di Dati e Laboratorio 7
SELECT
• Il comando SELECT oltre che per normali
query è utilizzato anche per attivare le
funzioni postgres
• Esempi:
– SELECT current_date;
– SELECT 2 + 4;
A.A. 2005/2006 Basi di Dati e Laboratorio 8
Creazione di utenti e db
CREATE USER name [ [ WITH ] option [ ... ] ]
SYSID uid
| CREATEDB | NOCREATEDB
| CREATEUSER | NOCREATEUSER
| IN GROUP groupname [, ...]
| [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
| VALID UNTIL 'abstime'
CREATE DATABASE name
[ [ WITH ] [ OWNER [=] dbowner ]
[ TEMPLATE [=] template ]
[ ENCODING [=] encoding ]
[ TABLESPACE [=] tablespace ] ]
A.A. 2005/2006 Basi di Dati e Laboratorio 9
3
4. Creazione di tabelle
• La creazione di tabelle è conforme allo
standard, ad eccezione dell’uso di tipi di
dato particolari o funzioni
• Un esempio di estensione dello standard è
costituito dalla capacità di tabelle PSQL di
ereditare da altre tabelle
A.A. 2005/2006 Basi di Dati e Laboratorio 10
Esempio di inheritance
Postgresql tutorial (www.postgresql.org)
CREATE TABLE cities (
name text,
population real,
altitude int
);
CREATE TABLE capitals (
state char(2)
) INHERITS (cities);
A.A. 2005/2006 Basi di Dati e Laboratorio 11
Array
• Postgres supporta anche un tipo di dato
array
• Permette l’uso di attributi multivalore e
pertanto è da evitare perché non produce
schemi normalizzati
A.A. 2005/2006 Basi di Dati e Laboratorio 12
4
5. Funzioni e estensioni
• Postgres implementa un numero molto
vasto di funzioni e tipi di dato complessi
• Ricordiamo:
– Gestione della concorrenza e transazioni
– Estensioni procedurali di SQL
– Gestione del partizionamento
A.A. 2005/2006 Basi di Dati e Laboratorio 13
Esempio: gestione di sequenze
CREATE [ TEMPORARY | TEMP ] SEQUENCE name [ INCREMENT [ BY ]
increment ]
[ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO
MAXVALUE ]
[ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ]
• La sequenza viene poi manipolata con
– Nextval(sequenza)
– Currval(sequenza)
– Setval(sequenza,valore[,booleano*])
– * Determina se il nuovo valore influenza
nextval
A.A. 2005/2006 Basi di Dati e Laboratorio 14
Informazioni di catalogo e di sistema
• Il catalogo è strutturato secondo tre
schemi:
– Pg_catalog: database di sistema (utenti, etc.)
– Information_schema: contiene i metadati
– Public: schema di default dei nuovi db
• Esempi:
– SELECT * from pg_catalog.pg_user;
– SELECT * from information_schema.tables;
A.A. 2005/2006 Basi di Dati e Laboratorio 15
5
6. Controllo dell’accesso
• Il controllo dell’accesso si effettua per
mezzo del file
– pg_hba.conf
• Il file viene collocato nel cluster dallo script
initdb sulla base del default
• Modificando il file è possibile definire
diverse politiche di accesso con regole
analoghe a quelle dei firewall
A.A. 2005/2006 Basi di Dati e Laboratorio 16
Sintassi
local database user auth-method [auth-option]
host database user CIDR-address auth-method [auth-option]
hostssl database user CIDR-address auth-method [auth-option]
hostnossl database user CIDR-address auth-method [auth-option]
host database user IP-address IP-mask auth-method [auth-option]
hostssl database user IP-address IP-mask auth-method [auth-option]
hostnossl database user IP-address IP-mask auth-method [auth-option]
– Local: unix socket
– Host: TCP/IP
– SSL: uso di connessioni protette
– Auth-method: trust | reject | md5 | …
– Auth-option: opzioni dei diversi metodi
A.A. 2005/2006 Basi di Dati e Laboratorio 17
Esempi
#Tutti gli utenti su tutti i db
# TYPE DATABASE USER CIDR-ADDRESS METHOD
local all all trust
# Lo stesso per TCP/IP
# TYPE DATABASE USER CIDR-ADDRESS METHOD
host all all 127.0.0.1/32 trust
#Lo stesso ma specificando gli indirizzi via IP-MASK
# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD
host all all 127.0.0.1 255.255.255.255 trust
A.A. 2005/2006 Basi di Dati e Laboratorio 18
6
7. Esempi
# Consenti ad un utente da host 192.168.12.10 di connettersi al database
# quot;postgresquot; se l’utente fornisce la password corretta
# TYPE DATABASE USER CIDR-ADDRESS METHOD
host postgres all 192.168.12.10/32 md5
A.A. 2005/2006 Basi di Dati e Laboratorio 19
Dump e restore
• Copiare e salvare un database
– pg_dump [opzioni] nomedb > file
– pg_dumpall consente il dump delll’intero
cluster
• Le opzioni dello script consentono di determinare
se effettuare il dump del solo schema o anche dei
dati e di determinare l’utente
• Restore
– Psql nomedb < file
• Occorre creare il database vuoto e eventuali utenti
associati al db
A.A. 2005/2006 Basi di Dati e Laboratorio 20
Dump
• Il dump può essere diviso su più file
– pg_dump dbname | split -b 1m - filename
– cat filename* | psql dbname
• Oppure compresso
– pg_dump dbname | gzip > filename.gz
– cat filename.gz | gunzip | psql dbname
A.A. 2005/2006 Basi di Dati e Laboratorio 21
7