Per prima cosa mi basta provare un semplice:
sqlite3 sqllitedb .dump | psql postgresdb
A quel punto, basta provarlo. Scrivi alcuni script di test in Django per produrre un set di record di esempio per ogni applicazione, quindi esegui un diff per assicurarti che siano identici. Se lo sono, allora la tua conversione probabilmente va bene.
Se questo non funziona ...
Mi consiglia di non utilizzare Django per scaricare e caricare i dati, dal momento che sto cercando di indovinare che non è ottimizzato per farlo.
Invece, vorrei creare una seconda versione della tua app con le corrette impostazioni del database PostgreSQL, eseguire syncdb per creare tutte le tabelle, quindi copiare i dati da mysqllite a PostgreSQL usando qualche altro strumento.
Il problema è che la maggior parte dei problemi durante la conversione dei dati si trova nelle definizioni della tabella, ecc. Quelli sembrano essere i più idiosincratici. Se è possibile generare uno script SQL che è un dump di solo il contenuto della tabella, è consigliabile utilizzare i comandi SQL standard INSERT INTO
.
Onestamente, non riesco a capire perché ci sarebbero problemi con le chiavi esterne. Supponendo che sqlite stia creando chiavi estranee accurate (e perché no?) Allora non c'è modo che non copi correttamente. In realtà, le chiavi esterne non sono forme speciali di dati. Non è più probabile che il campo UserProfile.user_id
conterrà un valore errato rispetto al campo UserProfile.photo
. Se la preoccupazione di una chiave esterna è che i campi stessi non sono identificati correttamente come campi di chiavi esterne (cioè senza vincoli), allora l'opzione di creare prima il database utilizzando syncdb
risolverà il problema.
Come per troncamento: a quanto ho capito, PostgreSQL genera un errore grave se i dati stanno per essere troncati. Non so se questo è il caso di sqlite o se solo tronca in silenzio. In ogni caso, assumendo nuovamente che sqlite non stia in qualche modo modificando i dati durante l'esportazione, i campi dovrebbero contenere dati di lunghezza appropriata per il campo in cui si trovano.L'unica cosa che posso pensare a questo potrebbe riguardare la codifica dei caratteri, quindi assicurati che i campi di PostgreSQL abbiano la stessa codifica delle tabelle sqlite, almeno durante l'importazione.
fonte
2010-08-13 15:00:39
pitone manage.py DumpData -> dalla memoria sul mio PC ... se provo app da app, è meglio, ma l'importazione non funziona . –