我正在从测试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运行良好但现在这个对象插入失败。
有人可以提供一些意见吗?谢谢。
答案 0 :(得分:4)
在Django documentation中进行了一些挖掘:
字符字段
使用VARCHAR列类型存储的任何字段都有 如果您使用 unique = True ,则max_length 限制为255个字符 为了这个领域。
强调我的。这个领域你有unique=True
吗?
这是一个Django限制,PostgreSQL不介意。您可能希望切换到数据类型text
。 Django用语TextField
。
旧观点:
user
是reserved word in PostgreSQL和任何SQL标准。不要将它用作列名。
你可以使用它,如果你用双引号括起来,但远离那个愚蠢。只是不要将保留字用于标识符。如初。
另外......
user = motor_trend,
name = 'Camaro 2010',
category = cars,
motor_trend
和cars
没有像其他值一样被引用的任何特殊原因?外键,如@Ignacio评论?