Next Previous Contents

7. Guida per un avvio rapido

Rifatevi anche al capitolo Installazione Rapida.

7.1 Creare, eliminare, rinominare database

Potete usare l'interfaccia grafica 'pgaccess' per creare ed eliminare i database; oppure potete usare la utility a riga di comando 'psql'.


Se siete connessi come root, passate all'utente 'postgres':
# xhost +  (Per permettere a pgaccess l'accesso al display)
bash$ man createdb
bash$ createdb miodatabase
bash$ man psql
bash$ psql miodatabase
..... in psql, premete i tasti freccia su/giù per utilizzare lo storico dei comandi;
oppure usate il comando \s

bash$ export DISPLAY=<nomehost>:0.0
bash$ man pgaccess
bash$ pgaccess miodatabase

Adesso potete cominciare a SPARARE comandi SQL in psql o in pgaccess !!

Per eliminare il database, eseguite:


bash$ man dropdb
bash$ man destroydb   (per le versioni precedenti di pgsql)
bash$ dropdb <nomedb>

È anche possibile eliminare un database dall'interno di una sessione SQL, digitando:
> drop database <nomedb>

Per rinominare un database vedere Backup e Restore

7.2 Creare ed eliminare gli utenti

Per creare nuovi utenti, effettuate il login come utente unix 'postgres'. Potete usare l'interfaccia grafica 'pgaccess' per creare o eliminare utenti.

(n.d.t.: d'ora in poi ci riferiremo alla versione in lingua italiana di pgaccess, attivabile con la sequenza Database|Preferences|Preferred language italiano|Save; ma accanto, tra parentesi, indicheremo anche i comandi originali in lingua inglese)


bash$ man pgaccess
bash$ pgaccess <nome_database>

fate click sull'etichetta "Utenti" ("Users"), poi fate click su Oggetto|Nuovo (Object|New), oppure Oggetto|Cancella (Object|Delete)

Potete anche usare script da riga di comando. Usate lo script di shell chiamato 'createuser', che aziona psql


bash$ man createuser
bash$ createuser <nomeutente>
bash$ createuser -h host -p porta -i userid <nomeutente>

Per eliminare un utente postgres, usate lo script di shell 'destroyuser':


bash$ man dropuser
bash$ man destroyuser  (per precedenti versioni di pgsql)
bash$ destroyuser

7.3 Creare ed eliminare i gruppi

Non esiste, per ora, un'interfaccia grafica per impostare i gruppi di utenti. Dovete inserire/aggiornare esplicitamente i gruppi della tabella pg_group. Per esempio:


bash$ su - postgres
bash$ psql <nome_database>
..... in psql, premete i tasti freccia su/giù per utilizzare lo storico dei comandi;
oppure usate il comando \s

psql=> insert into pg_group (groname, grosysid, grolist)
psql=> values ('posthackers', '1234', '{5443, 8261}' );
INSERT 58224
psql=> grant insert on foo to group posthackers;
CHANGE
psql=>

I campi in pg_group sono:

groname - Il nome del gruppo. Questo nome dovrebbe essere puramente alfanumerico; non aggiungetegli caratteri di sottolineatura o di punteggiatura.

grosysid - L'ID del gruppo. Questo è un int4, e dovrebbe essere unico per ogni gruppo.

grolist - La lista degli ID degli utenti che appartengono al gruppo. Questo dato è un int4[].

Per eliminare il gruppo:


bash$ su - postgres
bash$ psql <nome_database>
..... in psql, premete i tasti freccia su/giù per utilizzare lo storico dei comandi;
oppure usate il comando \s

psql=> delete from pg_group where groname = 'posthackers';

7.4 Creare, modificare ed eliminare una tabella

Potete usare l'interfaccia grafica 'pgaccess', oppure lo strumento da riga di comando 'psql', per creare, modificare o eliminare una tabella in un database.


bash$ man pgaccess
bash$ pgaccess <nome_database>

Fate clic sui bottoni Tabelle | Nuovo | Disegna (Table|New|Design).
bash$ man psql
bash$ psql <nome_database>
..... in psql, premete i tasti freccia su/giù per utilizzare lo storico dei comandi;
oppure usate il comando \s

Al prompt di psql, digitate le istruzioni standard SQL per la gestione delle tabelle, come 'create table', 'alter table', o 'drop table'.

7.5 Creare, modificare ed eliminare record in una tabella

Potete usare l'interfaccia grafica 'pgaccess', oppure il tool da riga di comando 'psql', per creare, modificare od eliminare record nella tabella di un database.


bash$ man pgaccess
bash$ pgaccess <nome_database>

Fate clic sui bottoni Tabella | < cliccare su una tabella > | Apri (Table|<cliccare su una tabella>|Open).
bash$ man psql
bash$ psql <nome_database>
..... in psql, premete i tasti freccia su/giù per utilizzare lo storico dei comandi;
oppure usate il comando \s

Al prompt di psql, digitate le istruzioni standard SQL per la gestione delle tabelle, come 'insert into nome_tabella', 'update nome_tabella', o 'delete from nome_tabella'.

7.6 Cambiare il database attivo

Potete usare l'interfaccia grafica 'pgaccess', oppure il tool da riga di comando 'psql', per cambiare il database attivo.


bash$ man pgaccess
bash$ pgaccess <nome_database>

Fate click sui bottoni Database | Apri (Database|Open) .
bash$ man psql
bash$ psql <nome_database>
..... in psql, premete i tasti freccia su/giù, per utilizzare lo storico dei comandi;
oppure usate il comando \s

psql=> connect <nome_database> <utente>

7.7 Effettuare backup e restore del database

PostgreSQL fornisce due programmi di utilità per salvare una copia di sicurezza (backup) del vostro sistema: pg_dump per fare il backup di database individuali, e pg_dumpall per fare il backup di tutto il database in un colpo solo.


bash$ su - postgres
bash$ man pd_dump
bash$ pd_dump <nome_database> > nome_database.pgdump

Per scaricare il dump di tutti i database:
bash$ man pg_dumpall
bash$ pg_dumpall -o > db_all.out

Per ricaricare (ripristinare) un database scaricato con pg_dump:
bash$ cat nome_database.pgdump | psql <nome_database>

Per ricaricare (ripristinare) tutti i database scaricati con pg_dump:
bash$ psql -e template1 < db_all.out

Questa tecnica può essere usata per spostare i database in nuove collocazioni, e per rinominare i database esistenti.

ATTENZIONE: Di ogni database si dovrebbe fare il backup in maniera regolare. PostgreSQL gestisce autonomamente i suoi file, all'interno del file system. Per questo motivo, per fare i backup dei vostri database, non è consigliabile affidarsi ai soli sistemi di backup del file system; non c'è garanzia che i file saranno utilizzabili e in uno stato coerente, dopo il ripristino.

BACKUP DI DATABASE ESTESI: Poiché PostgreSQL ammette tabelle più grandi della dimensione massima dei file sul vostro file system, può essere problematico scaricare la tabella in un file, perché il file risultante sarà probabilmente più grande della dimensione massima ammissibile sul vostro sistema. Nel momento in cui pg_dump scrive su stdout, potete usare solo gli strumenti standard di unix per aggirare questo possibile problema: scaricate il database utilizzando la compressione:


bash$ pg_dump <nome_database> | gzip > nomefile.dump.gz
Ricaricate con:
bash$ createdb <nome_database>
bash$ gunzip -c nomefile.dump.gz | psql <nome_database>
Oppure
bash$ cat nomefile.dump.gz | gunzip | psql <nome_database>
Uso di split:
bash$ pg_dump <nome_database> | split -b 1m - nomefile.dump.
Nota: C'è un punto (.) dopo nomefile.dump, nel comando sopra riportato!!
Potete ricaricare con:
bash$ man createdb
bash$ createdb <nome_database>
bash$ cat nomefile.dump.* | pgsql <nome_database>

Naturalmente il nome del file (nomefile), ed il contenuto dell'output di pg_dump, non devono necessariamente coincidere con il nome del database. Inoltre il database ripristinato può avere un nuovo nome scelto arbitrariamente, e perciò questo meccanismo è anche adatto per rinominare i database.

Backup di oggetti ESTESI: Gli oggetti estesi non vengono gestiti da pg_dump. La directory contrib/pg_dumplo, dell'albero dei sorgenti di Postgres, contiene un programma che può farlo.

BACKUP DEL FILESYSTEM: Potete usare gli strumenti e i comandi del Sistema Operativo Linux per effettuare il backup dell'intero database. Ma prima di usare questo metodo, per fare il backup o il ripristino, dovete bloccare del tutto il server database postgresql. Il backup o il ripristino del filesystem può essere da 2 a 3 volte più rapido dell'esecuzione del comando pg_dump, con il solo svantaggio che si deve bloccare del tutto il server database. È altamente raccomandabile l'uso di strumenti di backup e ripristino come Arkeia, Bru. Questi strumenti vengono forniti nella sotto-intestazione "Backup and Restore Utility" della lista di analogie Mic-Lin presso http://aldev.8m.com, e i cui siti mirror sono: webjump, angelfire, geocities, virtualnet, bizland, theglobe, spree, infoseek, bcity, 50megs I comandi del SO da impiegare sono:


bash$ man tar
bash$ tar -cvf backup.tar /usr/local/pgsql/data
oppure, impiegando la compressione
bash$ tar -zcvf backup.tgz /usr/local/pgsql/data

BACKUP INCREMENTALE: Questa funzionalità è elencata nella lista delle cose da fare (todo), e apparirà nei futuri rilasci di PostgreSQL.

7.8 Protezione del database

Vedere il capitolo in Protezione di PostgreSQL.

7.9 Aiuto in linea

È molto importante che impariate ad usare l'aiuto in linea di PostgreSQL, poiché vi risparmierà molto tempo e vi consentirà un rapidissimo accesso alle informazioni.

Leggete le pagine di manuale in linea sui vari comandi come createdb, createuser, ecc..


bash$ man createdb

Leggete anche l'aiuto in linea di psql, digitando \h al prompt di psql


bash$ psql miodatabase
psql> \h

Suggerimento: in psql, premete i tasti freccia su/giù per utilizzare lo storico dei comandi;
oppure usate il comando \s

7.10 Creare trigger e stored procedure

Per creare trigger o stored procedure, si deve prima installare 'plpgsql' nel particolare database che state usando, eseguendo lo script 'createlang'. Se volete che il vostro database sia quello predefinito, installate 'plpgsql' nel 'template1', così i database creati saranno cloni del template1. Leggete la pagina web di 'createlang', e precisamente la guida dell'Utente presso /usr/doc/postgresql-7.0.2/user/index.html.


bash$ man createlang
bash$ createdb miodb
bash$ export PGLIB=/usr/lib/pgsql
bash$ createlang plpgsql miodb
bash$ createlang plpgsql template1

Leggete anche gli esempi di trigger e di stored procedure che trovate in RPM degli esempi . Ecco un frammento di codice tratto dall'RPM degli esempi:
create function tg_pfield_au() returns opaque as '
begin
    if new.name != old.name then
        update PSlot set pfname = new.name where pfname = old.name;
    end if;
    return new;
end;
' language 'plpgsql';

create trigger tg_pfield_au after update
    on PField for each row execute procedure tg_pfield_au();

Un altro esempio di trigger:
create trigger check_fkeys_pkey_exist
        before insert or update on fkeys
        for each row
        execute procedure
        check_primary_key ('fkey1', 'fkey2', 'pkeys', 'pkey1', 'pkey2');

Potete installare anche il pacchetto di TEST: postgresql-test-7.0.2-2.rpm, e potete leggere gli esempi di script sql posti in /usr/lib/pgsql/test/regress/sql

Per vedere la lista di trigger nel database, digitate:


bash$ psql miodb
psql=> \?
psql=> \dS
psql=> \d pg_trigger
psql=> select tgname from pg_trigger order by tgname;

Per leggere la lista di funzioni e stored procedure nel database, digitate:


bash$ psql miodb
psql=> \?
psql=> \dS
psql=> \d pg_proc
psql=> select proname, prosrc from pg_proc order by proname;
psql=> \df

7.11 Documentazione di PostgreSQL

Per altre domande, leggete gli eccellenti manuali di PostgreSQL, molto approfonditi. La documentazione di PostgreSQL è distribuita insieme al pacchetto. Leggete le guide 'User's Guide', 'Programmer's Guide', 'Administrator's Guide', e gli altri manuali. I documenti dei rilasci sono reperibili presso http://www.postgresql.org/users-lounge/docs.


Next Previous Contents