PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

L'appareil Django échoue, indiquant DatabaseError :valeur trop longue pour le type caractère variable (50)

Mise à jour :la limite de 50 caractères est désormais de 255 dans Django 1.8

--

Réponse originale :

Je viens de rencontrer cela cet après-midi aussi, et j'ai une solution (en quelque sorte)

Ce message ici impliquait qu'il s'agissait d'un bogue Django lié à la longueur de la valeur autorisée pour auth_permission. Des recherches plus approfondies confirment cette idée, tout comme ce ticket Django (même s'il est initialement lié à MySQL).

En gros, un nom d'autorisation est créé en fonction du nom détaillé d'un modèle plus une chaîne d'autorisation descriptive, et cela peut dépasser les 50 caractères autorisés dans auth.models.Permission.name.

Pour citer un commentaire sur le ticket Django :

Les préfixes les plus longs pour la valeur de chaîne dans la colonne auth_permission.name sont "Peut changer" et "Peut supprimer", tous deux avec 11 caractères. La longueur maximale de la colonne est de 50, donc la longueur maximale de Meta.verbose_name est de 39.

Une solution serait de pirater cette colonne pour prendre en charge> 50 caractères (idéalement via une migration vers le sud, dis-je, afin qu'elle soit facilement reproductible) mais la solution la plus rapide et la plus fiable à laquelle je pouvais penser était simplement de faire mon extra-long verbose_name définition beaucoup plus court (de 47 caractères dans le verbose_name à environ 20). Tout fonctionne bien maintenant.