Django и PostgreSQL - значение слишком длинное для изменения типа символа (512) - PullRequest
6 голосов
/ 07 января 2012

Я мигрирую из тестовой базы данных SQLite в базу данных PostgreSQL.

У меня есть образец объекта, который вставлен в базу данных, который работал на SQLite, но выдает ошибку в PostgreSQL.

Фрагмент кода:

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()

Я получаю:

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

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

Поле описания моей модели имеет максимальную длину 512 символов:

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

Но строка не может превышать 512 байт.

Я читал предыдущие сообщения об этой ошибке, одна из которых относится к кодировке. Похоже, не в этом дело.

Я размещен на Webfaction. Я создал базу данных с кодировкой utf-8 и приступил к использованию syncdb. Syncdb работал отлично, но теперь эта вставка объекта не удалась.

Может кто-нибудь дать какой-нибудь вклад? Спасибо.

1 Ответ

4 голосов
/ 07 января 2012

После некоторого поиска в документации Django :

Символьные поля

Любые поля, которые хранятся с типами столбцов VARCHAR, имеют свои max_length ограничено 255 символами , если вы используете unique = True для поля.

Акцент мой. У вас есть unique=True для поля? Это ограничение Django, PostgreSQL не будет возражать. Возможно, вы захотите переключиться на тип данных text. TextField на языке Джанго.


Старые идеи:

user - это зарезервированное слово в PostgreSQL и любом стандарте SQL. Не используйте его в качестве имени столбца.

Вы можете использовать его, если заключите его в двойные кавычки, но держитесь подальше от этой глупости. Только не используйте зарезервированные слова для идентификаторов. Когда-либо.

Также ...

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

Есть какая-то конкретная причина, почему motor_trend и cars не заключены в кавычки, как другие значения? Внешние ключи, такие как @Ignacio прокомментировал?

...