Newsgroup: it.comp.software.database
Titolo: Ripristinare un database Postgres 8.0

Ho un db Postgres 8.0 su un server Windows 2000.
Causa morte del disco C:, ho dovuto ripristinare dai nastri (non 
recenti, ma a me interessa la struttura del db, non i dati).
Però Postgres non parte, con questo errore:
008-07-03 11:14:24 LOG:  database system was interrupted at 2007-01-15 
07:42:48 W. Europe Standard Time
2008-07-03 11:14:24 LOG:  could not open file "C:/Program 
Files/PostgreSQL/8.0/data/pg_xlog/000000010000000000000042" (log file 0, 
segment 66): No such file or directory
2008-07-03 11:14:24 LOG:  invalid primary checkpoint record
2008-07-03 11:14:24 LOG:  could not open file "C:/Program 
Files/PostgreSQL/8.0/data/pg_xlog/000000010000000000000042" (log file 0, 
segment 66): No such file or directory
2008-07-03 11:14:24 LOG:  invalid secondary checkpoint record
2008-07-03 11:14:24 PANIC:  could not locate a valid checkpoint record
abnormal program termination
Il file che lui cerca non c'è (ci sono il 43 ed il 44).
Ho provato a creare il file recovery.conf, ma la sostanza non cambia: 
vuole quel file.
Ho seguito la documentazione on line, ed ho prodotto questo file 
recovery.conf:
ecovery_target_time='2007-01-10 09:32:00'
restore_command = 'copy c:/temp/data/pg_xlog/%f %p'
recovery_target_inclusive='false'
Qualcuno ha suggerimenti?
Andrea

 Andrea
Allora, ho risolto lanciando il comando
pg_resetxlog -f /dir/dove/stanno/i/dati
Ha emesso alcuni messaggi, ha eliminato qualcosa, ed adesso funziona 
(sembra)
Saluti
Andrea

 Ha emesso alcuni messaggi, ha eliminato qualcosa, ed adesso funziona 
Da come hai descritto tutta la storia, sembra che tu abbia fatto il
backup dei file fisici che compongono il database, ovvero hai fatto
quello che in gergo viene chiamato backup a freddo. Personalmente ti
sconsiglio un approccio del genere, in quanto rischia di essere
problematico all'inverosimile (lo hai sperimentato su te stesso: per
ripristinare il db hai dovuto sputare sangue). Un approccio molto piu`
semplice e sicuro e` quello di creare un dump del database e fare il
backup di quello. approccio del genere ti permette di eliminare molte
rogne durante il processo di ripristino, in quanto si riduce al
caricamento della struttura e dei dati in una nuova istanza del
database. Per maggiori informazioni, dai un'occhiata ai comandi pg_dump
e pg_dumpall
Enrico

Enrico 'Henryx' Bianchi ha scritto:

In effetti è quello che faccio sull'altra macchina, quella che ha un db 
'dinamico' con alcuni GB di dati.
Questa era solo una macchina che fa da 'motore database' ad 
un'applicazione distribuita su vari utenti, che ha solo tabelle vuote, e 
mi scocciava doverle ricreare a mano... (od anche riprendere in mano il 
codice dell'applicazione e aggiungere una sezione 'create table')...
andrea

 codice dell'applicazione e aggiungere una sezione 'create table')...
Penso che tu non abbia mai visto come funziona un dump di PostgreSQL.
Per farti capire, senza specifcare opzioni, pg_dump estrae prima la
struttura delle tabelle, dopodiche` estrae i dati (che inserisce con il
comando COPY). Specificando qualche opzione, PostgreSQL inserisce
nel dump anche la creazione automatica del database e struttura i dati
in modo da essere inseriti tramite normali INSERT. Qual e`, quindi, il
problema di eseguire un dump piuttosto che rischiare con una copia
fisica dei file?
Enrico

Enrico 'Henryx' Bianchi ha scritto:

Non mi sono spiegato: non è che non sappia fare un dump, è che quella 
macchina, essendo 'abbastanza inutile' e 'abbastanza non funzionante', 
non è mai stata sottoposta a trattamenti di backup diversi da un 
ntbackup ogni tanto. La struttura delle tabelle (4) sta sul documento di 
progetto e implementazione, volendo ripristinare il tutto basta un 
copia&incolla; considerando che quella macchina, per qualche motivo 
oscuro, si è sempre rifiutata di eseguire correttamente HTML dinamico 
(.NET, PHP, Java, mi mancava solo Ruby...), il fatto che sia morta è 
solo un favore che ha fatto a tutti noi. Se Postgres quando è stato 
riavviato avesse anche azzerato le tabelle (lasciando solo la struttura) 
  mi sarebbe andato bene lo stesso.
Andrea