2010-03-04 7 views
3

Je passe de l'utilisation de SQLite3 à PostgreSQL, et espérais que je pourrais remplir la base de données en utilisant les appareils que j'utilisais pour peupler SQLite3. Cependant, je reçois ces erreurs:Django shift à PostgreSQL ne parvient pas à importer des fixtures, indiquant des données trop longues

$ python manage.py loaddata fixtures/core.json fixtures/auth.json 

Installing json fixture 'fixtures/core' from absolute path. 
Problem installing fixture 'fixtures/core.json': Traceback (most recent call last): 
    File "/home/mvid/webapps/nihl/nihlapp/django/core/management/commands/loaddata.py", line 153, in handle 
    obj.save() 
    File "/home/mvid/webapps/nihl/nihlapp/django/core/serializers/base.py", line 163, in save 
    models.Model.save_base(self.object, raw=True) 
    File "/home/mvid/webapps/nihl/nihlapp/django/db/models/base.py", line 495, in save_base 
    result = manager._insert(values, return_id=update_pk) 
    File "/home/mvid/webapps/nihl/nihlapp/django/db/models/manager.py", line 177, in _insert 
    return insert_query(self.model, values, **kwargs) 
    File "/home/mvid/webapps/nihl/nihlapp/django/db/models/query.py", line 1087, in insert_query 
    return query.execute_sql(return_id) 
    File "/home/mvid/webapps/nihl/nihlapp/django/db/models/sql/subqueries.py", line 320, in execute_sql 
    cursor = super(InsertQuery, self).execute_sql(None) 
    File "/home/mvid/webapps/nihl/nihlapp/django/db/models/sql/query.py", line 2369, in execute_sql 
    cursor.execute(sql, params) 
    File "/home/mvid/webapps/nihl/nihlapp/django/db/backends/util.py", line 19, in execute 
    return self.cursor.execute(sql, params) 
DataError: value too long for type character varying(30) 

Je ne l'habitude d'obtenir des erreurs de longueur de données, et je ne l'ai pas changé les modèles entre les commutateurs de base de données. PostgreSQL fonctionne avec utf8. Existe-t-il un moyen de voir exactement quelles valeurs de json il échoue afin que je puisse mettre à jour les modèles respectifs? Une idée de pourquoi les valeurs ont fonctionné dans SQLite mais échouent dans PostgreSQL?

Répondre

3

Vérifiez le fichier journal Postgres, il consignera l'instruction SQL complète échouée, y compris le nom de la table et la valeur de la chaîne incriminée.

+0

Malheureusement, mon hébergeur, Webfaction, ne conserve pas les logs de PostgreSQL. –

0

Vérifiez la longueur des données de SQLLite à l'intérieur des fixtures/core.json que vous essayez d'insérer dans Postgres. Il semble que les données dépassent 30 caractères de longueur. Vérifiez votre modèle django pour la propriété qui est limitée à 30 caractères, puis vérifiez vos appareils pour les données qui dépassent cette longueur maximale. Sqlite n'impose pas la longueur d'un varchar (n).

1

Pour résoudre le problème réel, changer votre déclaration en texte. Cela vous permettra d'importer vos données et de les nettoyer. Ensuite, vous pouvez réappliquer une contrainte.

+0

Ou simplement laisser tomber la contrainte, cela fera aussi l'affaire. –

+0

varchar (30) n'est pas une contrainte qui peut être supprimée. Il pourrait cependant changer le type de données dans sa déclaration. –

Questions connexes