2012-01-07 592 views
5

Estoy migrando de una base de datos SQLite de prueba a una base de datos PostgreSQL.Django y PostgreSQL: valor demasiado largo para caracteres de tipo que varían (512)

Tengo un objeto de muestra que se inserta en la base de datos, que funcionó en SQLite pero me da un error en PostgreSQL.

Código fragmento es:

car = CarItem.objects.create(
    user = motor_trend, 
    name = 'Camaro 2010', 
    category = cars, 
    condition = 'Used', 
    price = '28,547.00', 
    production_year = '2010', 
    color_interior = 'Black', 
    color_exterior = 'Inferno Orange Metallic', 
    reference = 'PRC17288', 
    location_of_creation = 'Undisclosed', 
    location_current = 'Columbus, OH, USA', 
    description = 'GORGEOUS ORANGE SS!!', 
) 
car.save() 

Me estoy haciendo un:

DatabaseError at /create/ 
value too long for type character varying(512) 

Traceback 
(...) 
    description = 'GORGEOUS ORANGE SS!!', 
(...) 

El campo de descripción de mi modelo tiene un 512 m de eslora máxima Char:

description = models.CharField(max_length=512,default='') 

pero hay De ninguna manera esa cadena tiene más de 512 bytes.

He leído publicaciones anteriores sobre este error, una que hace referencia a la codificación. No parece ser el caso.

Alojado en Webfaction. Creé una base de datos, con codificación utf-8, y procedí a usar syncdb. Syncdb funcionó perfectamente, pero ahora esta inserción de objetos falla.

¿Alguien puede dar alguna entrada? Gracias.

Respuesta

4

Después de algo de investigación en los Django documentation:

Campos de caracteres

Cualquier campo que se almacenan con los tipos de columnas VARCHAR tienen su max_length restringido a 255 caracteres si está utilizando única = True para el campo.

Énfasis mío. ¿Tiene unique=True para el campo? Esta es una restricción de Django, a PostgreSQL no le importaría. Es posible que desee cambiar al tipo de datos text. TextField en el lenguaje de Django.


Las viejas ideas:

user es un reserved word in PostgreSQL y cualquier estándar SQL. No lo use como nombre de columna.

Usted podría usarlo, si lo encerró entre comillas dobles, pero aléjese de esa locura. Simplemente no use palabras reservadas para identificadores. Nunca.

también ...

user = motor_trend, 
name = 'Camaro 2010', 
category = cars, 

alguna razón en particular por qué motor_trend y cars no se citan como los otros valores? Llaves extranjeras, como @Ignacio comentó?

+0

Porque son claves foráneas. Y el ORM de Django probablemente cita los nombres de los campos correctamente. –

+0

Sí, esas son las variables de Django definidas anteriormente, algunas cadenas, otros objetos. Sin embargo, ¿esto está relacionado con el problema de descripción? ¿El hecho de que tengo un campo de usuario está causando el problema de descripción? –

+0

@VascoPatricio: Sin conexión obvia al problema, no. Como no había nada obvio, estaba buscando algo sospechoso. Busqué en el manual y creo que encontré algo ahora. Enmendé mi respuesta, eche un vistazo. –

Cuestiones relacionadas