PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Ripristina PostgreSQL db dal backup senza problemi di vincolo di chiave esterna

Sembra che tu stia ricevendo un dump SQL anziché un dump binario da pg_dump . Ciò ti darebbe una grande quantità di SQL con lo schema (inclusi gli FK) in alto seguito da un gruppo di INSERT per ricaricare i dati. Un dump binario da pg_dump ti servirebbe meglio, sembra che tu abbia bisogno di un po' di configurazione extra per dire a PhpPgAdmin dove pg_dump è. Quindi inseriresti quel dump binario in pg_restore e pg_restore ricostruirebbe tutto nell'ordine corretto per evitare problemi di integrità referenziale (o, più precisamente, pg_restore ripristinerebbe tutti i dati, quindi aggiungerebbe i vincoli).

PhpPgAdmin sembra voler lavorare con semplici dump SQL anziché pg_restore . Lo trovo difficile da credere ma non riesco a trovare nulla nella documentazione sull'invocazione di pg_restore . Se questo è vero, probabilmente dovrai modificare manualmente il dump SQL e spostare tutti gli FK alla fine.

Potresti anche provare ad aggiungere SET CONSTRAINTS ALL DEFERRED; nella parte superiore del dump SQL, che dovrebbe ritardare il controllo dei vincoli fino alla fine della transazione, dovrai anche assicurarti che l'intero blocco di INSERT sia contenuto all'interno di una transazione.

Se PhpPgAdmin davvero non può invocare pg_restore allora è meglio usare pg_dump e pg_restore manualmente in modo da avere il controllo necessario sulle procedure di backup. Siamo spiacenti ma qualsiasi strumento di amministrazione del database che non è in grado di gestire il backup di un database con FK è peggio che inutile. Si spera che qualcuno che conosce PhpPgAdmin si presenti e ci faccia sapere come usare pg_restore con PhpPgAdmin.