Étrange PostgreSQL “valeur trop long pour le type character varying(500)”
J'ai une Postgres schéma qui ressemble à:
Le problème est que quand je veux enregistrer le texte de plus de 500 caractères dans la colonne description, j'obtiens l'erreur:
value too long for type character varying(500)
Dans la documentation de Postgresql il est dit de type texte peut avoir nombre illimité de caractères.
Je suis en utilisant postgresql-9.1.
Ce tableau a été généré à l'aide de Django 1.4 et le type de champ dans le modèle est TextField, si ce qui contribue à expliquer le problème de plus.
Toutes les idées que pourquoi ce qui se passe et ce que je peux faire pour le réparer?
- double possible de Django luminaire échoue, déclarant que "la DatabaseError: valeur trop long pour le type character varying(50)"
- Le problème se produit avec psql inserts, ou seulement de django?
- Depuis que vous avez généré la table à partir d'un modèle Django, la façon de montrer votre Django modèle de code?
- Je viens de vérifier le psql insérer via la ligne de commande, l'erreur ne se produit pas là. Il pourrait être un problème d'encodage.
- Est-il possible que cette colonne a été character varying(500), mais a été changé pour le texte, mais le changement n'a pas été validée, et donc le django client ne peut pas voir le changement? Cela semble peu probable, mais l'erreur de django certainement indique que, pour elle, la colonne est de type char, var, tandis que nous voyons clairement à partir de cette sortie qu'il est en mode texte.
- Non, il n'est pas un problème d'encodage. S'il vous plaît montrer la réelle instruction INSERT généré par Django, et le plein, le texte exact du message d'erreur. Vous pouvez obtenir à la fois de l'PostgreSQL fichiers journaux.
- Je viens de vérifier le fichier de log de l'erreur était survenue lors d'un domaine connexe a été enregistré, ce qui n'était pas respectueux de par les 500 char contrainte
- Heureux d'entendre que vous avez une solution. Maintenant, vous savez une chose à vérifier, et une chose de plus à inclure dans les questions d'avenir 🙂
- Merci pour votre réponse, m'a présenté à un très maniable morceau de connaissances pour le suivi des bogues.
Vous devez vous connecter pour publier un commentaire.
En spécifiant la colonne comme
VARCHAR(500)
vous avez défini explicitement 500 caractères au maximum. Vous pourriez ne pas avoir fait vous-même explicitement, mais Django a fait pour vous quelque part. Vous dire où est dur quand vous n'avez pas montré votre modèle, le texte complet de l'erreur, ou la requête qui a produit l'erreur.Si vous n'en voulez pas, utilisez un franc
VARCHAR
, ou utiliser leTEXT
type.varchar
ettext
ont une longueur limitée uniquement par le système de limites sur la taille de la colonne - 1 go - et par votre mémoire. Cependant, l'ajout d'un qualificatif àvarchar
définit une plus petite limite manuellement. Tous les éléments suivants sont largement équivalentes:La seule différence est dans la façon de métadonnées de base de données est signalée et qui SQLSTATE est déclenché lorsque la contrainte est violée.
La longueur de contrainte n'est généralement pas obéi à déclaration préparée à l'avance les paramètres, les appels de fonction, etc, comme indiqué:
et dans les conversions explicites-il à la troncature:
donc je pense que vous sont à l'aide d'un
VARCHAR(500)
colonne, et vous êtes à la recherche à la mauvaise table ou mal instance de la base de données.varchar(500)
est utilisé quelque part. S'il vous plaît montrer le réel de la requête dans votre question afin que nous puissions voir la requête en faillite. Si vous ne pouvez pas obtenir à partir de Django, l'obtenir à partir de PostgreSQL fichiers journaux et de modifier une question à ajouter à la requête de la question. Vous pouvez avoir besoinlog_statement = 'all'
danspostgresql.conf
et recharger PostgreSQL si la totalité du texte de la requête n'est pas connecté aux côtés de l'erreur.Caractère variable est différente de celle du texte. Essayez d'exécuter
Qui va changer le type de la colonne de texte, qui est limitée à une très grande quantité de données (vous auriez probablement jamais le frapper.)
Nous avons eu ce même problème. Nous l'avons résolu en ajoutant de la longueur de l'entité attribut définition: