6

我正在从测试 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 工作得很好,但现在这个对象插入失败了。

有人可以提供一些意见吗?谢谢你。

4

1 回答 1

4

在对Django 文档进行了一些挖掘之后:

字符字段

如果您对字段使用unique=True ,则使用VARCHAR 列类型存储的任何字段的 max_length限制为 255 个字符

强调我的。你有unique=True这个领域吗?这是 Django 的限制,PostgreSQL 不会介意。您可能想要切换到数据类型textTextField用 Django 的说法。


老想法:

user是PostgreSQL和任何 SQL 标准中的保留字。不要将其用作列名。

如果你用双引号括起来,你可以使用它,但远离这种愚蠢。只是不要使用保留字作为标识符。曾经。

还 ...

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

有什么特别的原因为什么motor_trendcars没有像其他值一样被引用?像@Ignacio 评论的外键?

于 2012-01-07T05:45:15.037 回答