PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

O dispositivo Django falha, informando DatabaseError:valor muito longo para o tipo de caractere variando (50)


Atualização:o limite de 50 caracteres agora é 255 no Django 1.8

--

Resposta original:

Acabei de encontrar isso esta tarde também, e tenho uma correção (mais ou menos)

Este post aqui implica que é um bug do Django relacionado ao tamanho do valor permitido para auth_permission. Mais escavações apoiam essa ideia, assim como este ticket do Django (mesmo que inicialmente seja relacionado ao MySQL).

É basicamente que um nome de permissão é criado com base no verbose_name de um modelo mais uma string de permissão descritiva, e isso pode transbordar para mais de 50 caracteres permitidos em auth.models.Permission.name.

Para citar um comentário sobre o ticket do Django:

Os prefixos mais longos para o valor da string na coluna auth_permission.name são "Pode alterar " e "Pode excluir ", ambos com 11 caracteres. O comprimento máximo da coluna é 50, portanto, o comprimento máximo de Meta.verbose_name é 39.

Uma solução seria hackear essa coluna para suportar> 50 caracteres (idealmente por meio de uma migração do Sul, eu digo, para que seja facilmente repetível), mas a correção mais rápida e confiável que eu poderia pensar foi simplesmente fazer minha definição verbose_name extra longa muito mais curto (de 47 caracteres no verbose_name para cerca de 20). Tudo funciona bem agora.