Django shift to PostgreSQL 无法导入fixture,说明数据太长
Posted
技术标签:
【中文标题】Django shift to PostgreSQL 无法导入fixture,说明数据太长【英文标题】:Django shift to PostgreSQL fails to import fixtures, stating data too long 【发布时间】:2011-01-23 12:58:21 【问题描述】:我正在从使用 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 中失败的任何想法?
【问题讨论】:
【参考方案1】:Sqlite 不强制 varchar(n) 的长度。来自 sqlite 常见问题解答:
http://www.sqlite.org/faq.html#q9
【讨论】:
【参考方案2】:检查 Postgres 日志文件,它将记录完整的失败 SQL 语句,包括表名和违规字符串值。
【讨论】:
很遗憾,我的主机 Webfaction 没有保留 PostgreSQL 日志。【参考方案3】:要解决实际问题,请将您的声明更改为文本。这将允许您导入数据并对其进行清理。然后你可以重新应用一个约束。
【讨论】:
varchar(30) 不是可以删除的约束。不过,他可以更改声明中的数据类型。【参考方案4】:检查您尝试插入 Postgres 的 fixtures/core.json 中 SQLLite 的数据长度。看起来数据超过 30 个长度字符。检查您的 django 模型是否有限制为 30 个字符的属性,然后检查您的固定装置是否有超过该最大长度的数据。
【讨论】:
以上是关于Django shift to PostgreSQL 无法导入fixture,说明数据太长的主要内容,如果未能解决你的问题,请参考以下文章
PostgreSQ 连接问题 FATAL: no pg_hba.conf entry for host
电脑开不了机,黑屏显示Press Shift-f10 to configure..就不动了
论文导读Recovering Latent Causal Factor for Generalization to Distributional Shifts
论文导读Recovering Latent Causal Factor for Generalization to Distributional Shifts
Django - render()、render_to_response() 和 direct_to_template() 有啥区别?