Mer, 25 Gen 2006
Le dicotomie sono il sale della vita.
Dopo la caduta del Muro di Berlino e la fine della guerra fredda, dopo la sconfitta delle ideologie socialiste, oggi il mondo si divide in due grandi categorie:
Pensateci bene. Voi in che categoria siete?
Paura..eh?? Brividino lungo la schiena??
Ok. Se vi sentite il vostro gentil orifizio anale ben stretto e volete sapere come organizzare per bene una procedura automatizzata per fare il backup di DataBase su PostgreSQL 8.x sotto sistemi Windows, allora seguitemi in questo piccolo tutorial.
PG_DUMP
Il backup di un DB su PostgreSQL viene effettuato grazie al comando pg_dump. Per avere una panoromacia su questo comando, potete visualizzare la reference on-line oppure aprire una command line da Windows (Start --> Esegui --> cmd) e digitare pg_dump -? (sempre che abbiate nella variabile PATH il riferimento alla directory bin di PostgreSQL).
Per effettuare un backup manuale di un DB è quindi sufficiente digitare:
pg_dump -h localhost -U [nome_utente] -Fc -x -f [nome_file_del_backup][nome_del_db_da_salvare]
Premendo invio vi verrà chiesto di digitare la password dell'utente specificato nell'argomento -U e si avvierà la procedura di backup.
Guardiamo gli altri argomenti che ho inserito in pg_dump:
F = formato del file di backup.
Nel mio caso ho specificato un formato custom (c) che è il formato riconosciuto dal comando di restore pg_restore (consiglio di scegliere sempre questo formato). Altri formati disponibili sono Tar-archive (t) e il PlainText (p) che genera uno script file SQL.
-x = Evita di salvare anche le informazioni dei privilegi sulle tabelle (da utilizzare a secondo dei casi).
Inoltre in caso di backup con formato PlainText è consigliabile inserire l'argomento -c che genera prima gli statement di cancellazione degli oggetti del DB (drop) e poi la loro creazione. In caso di ripristino con pg_restore per i formati custom e tar, ciò non è necessario poichè è una delle funzionalità del ripristino.
PostgreSQL backup
Se siete arrivati a leggermi fino a qui vuol dire che o siete degli eroi o dei geek oppure sei mia moglie che mi legge i post del blog per poi ricordarmi che sarebbe meglio prendere in mano un buon manuale di grammatica italiana...:-)
Ok. Adesso arriva il bello.
Dobbiamo creare una procedura automatizzata, magari schedulata da sistema operativo che ci consenta di avere un backup con tanto di nome file che riporti la data dell'operazione in formato yyyymmdd.
La prima cosa da risolvere in caso di schedulazione del backup è di evitare il prompt per la password.
Purtroppo in pg_dump non è possibile specificare la password dell'utente che esegue l'operazione.
Per risolvere il problema ci sono due soluzioni:
1) pgpass.conf
La prima è un workaround trovato qui:
http://www.postgresql.org/docs/8.0/interactive/libpq-pgpass.html
In pratica è possibile specificare la password relativa ad un utente in un file pgpass.conf che si trova in:
C:\Documents and Settings\[Nome Utente]\Dati applicazioni\postgresql
(in alcuni casi è possibile che questa directory e il relativo file non esistano. In questo caso create voi manualmente sia la dir che il file.
A questo punto dobbiamo scrivere nel file pgpass.conf le credenziali per accedere al DB in questo modo:
hostname:port:database:username:password
Ad esempio nel mio caso ho utilizzato * al posto del nome del DB per specificare che questo utente ha accesso a tutti i DB. La mia riga è questa:
localhost:5432:*:postgres:[password]
2) trust vs password
La seconda soluzione (molto più semplice ma da utilizzare solo su macchine di sviluppo) consiste nel modificare il metodo di autenticazione di PostgreSQL da Password authentication a Trust authentication.
Questa operazione prevede una modifica al file pg_hba.conf che si trova in:
[DIR_INSTALLAZIONE]\PostgreSQL\8.0\data
Aprite il file pg_hba.conf con un editor di testo.
Individuate la linea di testo:
host all all 127.0.0.1/32 md5
e sostituite "md5" con "trust" in modo da avere:
host all all 127.0.0.1/32 trust
Per maggiori informazioni su questo punto rimando a questo technotes:
http://www.postgresql.org/docs/8.0/interactive/auth-methods.html#AUTH-TRUST
Batch Rulez
Ok. A questo punto ci siamo. Possiamo schedulare una procedura di backup senza che ci venga bloccata dal prompt per la password.
Adesso creiamo un bel file batch che dovrà eseguire un backup numerando il file con la data odierna.
Ecco il contenuto del file che dovrà avere estensione .bat
-
@rem Copyright Pinellus.it
-
@rem Author: Gianluca Pinelli
-
@rem Ref: http://www.pinellus.it
-
-
@rem *** Batch file per il backup di un DB PostgreSQL su WinXP***
-
-
@REM Set della stringa data da anteporre ai file
-
for /f "tokens=1,2,3,4 delims=/ " %%a in ('DATE /T') do set Date=%%c%%b%%a
-
-
pg_dump -h localhost -U [nome_utente] -Fc -x -c -f [path_directory_di_backup]\%Date%.backup [nome_db]
Ovviamente al posto di [nome_utente], [path_directory_di_backup] e [nome_db] dovrete inserire i vostri dati.
Prendete questo file e fatelo puntare dallo scheduler di Windows.
E il gioco è fatto.
Lieto fine
Ti è stato utile questo tutorial? Stai pensando "Pinellus, ti devono fare Santo-Subito!!" ??
Bene, lascia un commento o cmq linkami. E se sei di Napoli o dei dintorni, puoi anche offrirmi un buon caffè.
:-)
5 Commenti a “Backup PostgreSQL 8.x su Windows. Definitivo.”
Lascia un Commento
Devi essere autenticato per inviare un commento.
25 Gennaio 2006 alle 23:33
Caffè e pizza già te li ho offerti.
Per quanto concerne il link sul sito … è questione di ore … il tempo di renderlo più carino del tuo blog …
Nel frattempo, come al solito, ti ringrazio … mi serviva proprio … sei la mia cellula Ricerca & Sviluppo preferita …
Saluti!
26 Gennaio 2006 alle 15:02
occhei sono piuttosto OT, ma mentre aggregavo su blog notes, ho visto la tua faccia aggregata a questo post aggregato. e mi ci sono aggregato a mia volta…
un saluto aggregante
20 Marzo 2006 alle 11:54
sì: santo subito
3 Novembre 2006 alle 16:20
Ma per fare il restore !?
grazie
14 Giugno 2007 alle 17:00
un terzo metodo ancora più semplice è settare la variabile di ambiente PGPASSWORD
ES:
set PGPASSWORD=mypassword
…e poi il backup
ciao