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 バイトを超えることはありません。

このエラーに関する以前の投稿を読んだことがあります。1 つはエンコーディングに関するものです。そうではないようです。

私は Webfaction でホストされています。utf-8 エンコーディングでデータベースを作成し、syncdb の使用に進みました。Syncdb は完全に機能しましたが、このオブジェクトの挿入は失敗します。

誰かが入力できますか?ありがとうございました。

4

1 に答える 1

4

Djangoのドキュメントを掘り下げた後:

文字フィールド

フィールドにunique=Trueを使用している場合、VARCHAR 列タイプで格納されたフィールドの max_lengthは 255 文字に制限され ます。

鉱山を強調します。unique=Trueフィールド用はありますか?これは Django の制限であり、PostgreSQL は気にしません。data type に切り替えることをお勧めしますtextTextFieldジャンゴ用語で。


古いアイデア:

userは、 PostgreSQLおよび SQL 標準の予約語です。列名として使用しないでください。

二重引用符で囲むと使用できますが、その愚かさは避けてください。識別子に予約語を使用しないでください。これまで。

また ...

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

motor_trendおよびcarsが他の値のように引用されない特定の理由はありますか? @Ignacioがコメントしたような外部キー?

于 2012-01-07T05:45:15.037 に答える