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 常见问题解答:

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 回答