2016-01-03 17 views
8

sono stato in grado di ripristinare un database PostgreSQL Django utilizzando le seguenti operazioni:Un modo semplice per ripristinare il database Django PostgreSQL?

  1. file di migrazione Elimina
  2. Inserisci prompt dei comandi psql. Connetti al database. drop schema public cascade; creare uno schema pubblico;
  3. Il passaggio 2 sembrava aver rimosso il mio ruolo utente e i miei diritti, quindi sono tornato al comando psql prom e li ho ricreati.
  4. Il passaggio 2 significava anche che dovevo eseguire i seguenti comandi nel prompt dei comandi di psql: concedere l'utilizzo sullo schema pubblico al pubblico; concessione creare su schema pubblico a pubblico;
  5. Fase 2 eliminato anche gli utenti standard Django che avevo creato così ho bisogno di ricreare questi
  6. pitone makemigrations manage.py & & pitone manage.py migrare

Attualmente sto facendo modifiche ai miei modelli e testare ogni cambiamento. Non ho alcun dato che devo conservare. C'è un modo più semplice di quanto sopra per ripristinare il database quando le migrazioni non funzionano?

Vorrei almeno sostituire il passaggio 2 con qualcos'altro in modo da poter saltare i passaggi 3-5.

risposta

13

Probabilmente il modo più semplice per farlo è ricreare l'intero database. In Ubuntu, appare così:

sudo su postgres 
psql 
drop database your_database_name; 
create database your_database_name with owner user_you_use_in_django; 
\q 
exit 

Ecco fatto. Hai un database pulito. Per renderlo pronto, devi eseguire le migrazioni con python manage.py migrate.

Se si sta lavorando al solo progetto, è possibile eliminare e ricreare le migrazioni, se lo si desidera.

+1

Grazie! Ma questo non semplifica molto i passaggi del mio OP. Devo ancora ricreare gli utenti predefiniti di django e devo comunque modificare i ruoli degli utenti per quello che voglio che siano. – user1283776

+0

Se sono necessari alcuni dati per essere presenti dopo la ricreazione del database, è possibile utilizzare le fixture o alcuni script di automazione. –

0

Non capisco perché pensi che sia necessario eliminare entrambe le migrazioni o il database. L'intero punto delle migrazioni è che si basano su ciò che è successo prima; non dovrebbe mai essere necessario eliminare e ricominciare. Fai le makemigrations ogni volta che apporti una modifica e la serie di migrazioni dovrebbe sempre funzionare.

In seguito, è possibile eseguire lo schiacciamento di una serie di migrazioni in una sola unità, per motivi di velocità, che viene nuovamente supportata in modo nativo. Ma non eliminare mai le migrazioni che hai già eseguito.

+1

Volevo eliminare le migrazioni perché ho ricevuto un errore durante l'esecuzione di manage.py migrate. Non ero in grado di capire come risolverlo. – user1283776

+2

Se non si dispone ancora di un database in produzione, rimuovere le migrazioni e crearle nuovamente non è molto importante. – cdvv7788

+0

Penso che questo sia l'atteggiamento sbagliato. Gli sviluppatori non dovrebbero avere paura di alcun codice. Hanno bisogno di avere il pieno controllo del processo, in particolare quadri di opinione e talvolta poco maneggevoli. Per risolvere un problema simile sulla conversione di tipi che sono un problema puramente interno a Django, sono tornato indietro e ho riscritto la cronologia (migrazione). I governi fanno tutto il tempo, perché non dovrebbero gli sviluppatori? – codervince

Problemi correlati