venerdì, settembre 19, 2008

Basi di dati: Postgre SQL

Tutorial su http://www.postresql.org


 

SQL 99 compliant (tra cui transazioni)

Supporto ad estensioni (funzioni, operatori, funzioni aggregate, index methods, tipi di dati estesi)

Gestione del partizionamento (fisico sui dischi), gestioni di tipi di dato complessi

Gestione delle sequenze: campi che prendono automaticamente un valore in base ad un'espressione (tipo campo contatore, ma più flessibile). Il tipo di dato è serial (di default somma 1, ma posso definire come voglio: CREATE SEQUENCE SequenceName INCREMENT BY increment, più altre opzioni come [MINVALUE MinValue] [MAXVALUE MaxValue] [START StartValue] [CYCLE] (ripropone a ciclo i valori)). In realtà usa un campo int il suo default value è il valore di una funzione

Gestione degli array (SCONSIGLIATO: viola i principi dei DB relazionali!)


 

Il server è un servizio (postmaster)

Il servizio viene avviato con un utente apposito (che non deve essere un amministratore di sistema)

Basato sul concetto di cluster: uno storage fisico dei database (solo uno alla volta).

Per creare un nuovo cluster:

  1. Creare una cartella (utente PostgreSQL deve avere permessi di lett/scr)
  2. Initdb –D cartella


 


 

Comandi

Comandi per il server iniziano con "\"

\? help sui comandi

\h help su SQL

\l Lista dei DB

\d Descrittore (\dt elenco tabelle, \df elenco delle funzioni)

\z lista di accesso a tabelle, viste e sequenze con privilegi di accesso


 

Comandi SQL si scrivono normali


 

Ereditarietà

Potrei ereditare una tabella da un'altra (lo fa solo Postgre, però ammazza la portabilità): CREATE TABLE (campi diversi) INHERITS TabellaBase;

Esempio Capitali eredità Città. Inserendo una capitale automaticamente sarà presente anche la città corrispondente automaticamente (ed eliminandola viene eliminata anche dalla classe base, sembra scontato, ma non lo è!)!


 


 


 

IN PRATICA

Connessione dal client:

psql TemplateName [-h host] [-U utente]


 

Appena lanciato lo script di inizializzazione crea 2 database: Template0 e Template1

Ogni DB in PostgreSQL viene creato a partire da un Template (che può essere personalizzato aggiungendo delle tabelle di uso comune ad esempio)

Crea postgresql.conf -> Configurazione generale del cluster. pg_hba.conf -> gestione della politica degli accessi (funziona in maniera simile alla configurazione di un firewall)


 

(fare partire il server)

Script di creazione degli utenti (createuser)

Script di creazione di un database (createdb)


 

Manipolare una sequenza:

Nextval(sequenceName)

Currval(sequenceName)

Setval(sequenceName, value[, bool]) Il valore bool indica se il valore inserito influenza nextval


 

Manipolare le connessioni

Editando il file pg_hba.conf

Ho le connessioni di tipo: local (locali), host (via rete), hostssl (via rete, ma solo con SLL), hostnossl

Sono definite a livello di database e utente (posso definirle in generale per un utente e/o DB)

Posso anche ulteriormente filtrare per un Ip e una mask


 

Dump/Restore di un DB

Pg_dump [opzioni] nomeDB > filename

Pg_dumpall consente il dump dell'intero cluster

Restore: Psql nomeDB < filename


 

Nessun commento: