3

SQLite3の使用からPostgreSQLに切り替えており、SQLite3の入力に使用していたフィクスチャを使用してデータベースにデータを入力できることを望んでいました。ただし、次のエラーが発生します。

$ python manage.py loaddata fixtures/core.json fixtures/auth.json

Installing json fixture 'fixtures/core' from absolute path.
Problem installing fixture 'fixtures/core.json': Traceback (most recent call last):
  File "/home/mvid/webapps/nihl/nihlapp/django/core/management/commands/loaddata.py", line 153, in handle
    obj.save()
  File "/home/mvid/webapps/nihl/nihlapp/django/core/serializers/base.py", line 163, in save
    models.Model.save_base(self.object, raw=True)
  File "/home/mvid/webapps/nihl/nihlapp/django/db/models/base.py", line 495, in save_base
    result = manager._insert(values, return_id=update_pk)
  File "/home/mvid/webapps/nihl/nihlapp/django/db/models/manager.py", line 177, in _insert
    return insert_query(self.model, values, **kwargs)
  File "/home/mvid/webapps/nihl/nihlapp/django/db/models/query.py", line 1087, in insert_query
    return query.execute_sql(return_id)
  File "/home/mvid/webapps/nihl/nihlapp/django/db/models/sql/subqueries.py", line 320, in execute_sql
    cursor = super(InsertQuery, self).execute_sql(None)
  File "/home/mvid/webapps/nihl/nihlapp/django/db/models/sql/query.py", line 2369, in execute_sql
    cursor.execute(sql, params)
  File "/home/mvid/webapps/nihl/nihlapp/django/db/backends/util.py", line 19, in execute
    return self.cursor.execute(sql, params)
DataError: value too long for type character varying(30)

以前はデータ長エラーが発生したことはなく、データベーススイッチ間でモデルを変更したこともありません。PostgreSQLはutf8を実行しています。それぞれのモデルを更新できるように、失敗したjson値を正確に確認する方法はありますか?値がSQLiteで機能したのに、PostgreSQLでは失敗した理由について何か考えはありますか?

4

4 に答える 4

3

Postgresログファイルを確認してください。テーブル名と問題のある文字列値を含む、失敗したSQLステートメント全体がログに記録されます。

于 2010-03-04T05:31:23.487 に答える
3

Sqliteはvarchar(n)の長さを強制しません。sqlite FAQから:

http://www.sqlite.org/faq.html#q9

于 2010-03-04T15:15:08.003 に答える
1

実際の問題を解決するには、宣言をテキストに変更します。これにより、データをインポートしてクリーンアップすることができます。次に、制約を再適用できます。

于 2010-03-04T18:55:43.230 に答える
0

Postgresに挿入しようとしているfixtures/core.json内のSQLLiteからのデータの長さを確認してください。データが30文字を超えているようです。djangoモデルで30文字に制限されているプロパティを確認してから、フィクスチャでその最大長を超えるデータを確認してください。

于 2010-03-04T06:08:04.787 に答える