【问题标题】:Converting sqlite database to postgres yields DatabaseError: value too long for type character varying(50)将 sqlite 数据库转换为 postgres 产生 DatabaseError: value too long for type character varying(50)
【发布时间】:2012-07-03 00:34:41
【问题描述】:

我正在使用 db:push 将我的 Django 应用程序的数据库上传到 Heroku,这会将我的数据库从 sqlite 转换为 postgres。

然而,在这个过程中我得到了错误:

Taps Server Error: PGError: ERROR: integer out of range

当我尝试使用 python manage.py syncdb 在 Heroku 的服务器上创建一个干净的数据库时,我收到了类似的消息:

Installing index for django_openid.UserOpenidAssociation model
Installing json fixture 'initial_data' from '/app/.heroku/venv/lib/python2.7/site-    packages/oembed/fixtures'.
Installing json fixture 'initial_data' from '/app/.heroku/venv/lib/python2.7/site-   packages/pinax/apps/photos/fixtures'.
Installing json fixture 'initial_data' from '/app/store/fixtures'.
Problem installing fixture '/app/store/fixtures/initial_data.json': Traceback (most recent call last):
File "/app/.heroku/venv/lib/python2.7/site-packages/django/core/management/commands/loaddata.py", line 169, in handle
obj.save(using=using)
File "/app/.heroku/venv/lib/python2.7/site-packages/django/core/serializers/base.py", line 165, in save
models.Model.save_base(self.object, using=using, raw=True)
File "/app/.heroku/venv/lib/python2.7/site-packages/django/db/models/base.py", line 501, in save_base
rows = manager.using(using).filter(pk=pk_val)._update(values)
File "/app/.heroku/venv/lib/python2.7/site-packages/django/db/models/query.py", line 491, in _update
return query.get_compiler(self.db).execute_sql(None)
File "/app/.heroku/venv/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 861, in execute_sql
cursor = super(SQLUpdateCompiler, self).execute_sql(result_type)
File "/app/.heroku/venv/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 727, in execute_sql
cursor.execute(sql, params)
File "/app/.heroku/venv/lib/python2.7/site-packages/django/db/backends/util.py", line 15, in execute
return self.cursor.execute(sql, params)
File "/app/.heroku/venv/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 44, in execute
return self.cursor.execute(query, args)
DatabaseError: value too long for type character varying(50)

在我看来问题出在初始数据上,但并不完全确定。我在这里发现了一篇文章,说这可能是字段编码的问题,但即使我要调查,也不完全确定如何阅读错误消息以找出究竟是什么导致了问题并查明哪个表/column 可能会导致问题。

【问题讨论】:

  • 你有你的 sqlite 数据库的 DDL 吗? postgresql 数据库怎么样?你也可以发一下吗?

标签: django sqlite postgresql heroku


【解决方案1】:

DatabaseError: value too long for type character varying(50) 表示您正在尝试将长度超过 50 个字符的字符串存储到 VARCHAR(50) 类型中。您可以通过使用max_length=50SlugFields(默认为max_length=50)查看CharFields 的模型来筛选潜在候选人。然后,查看您的initial_data.json 固定装置,看看您是否注意到为这些字段中的任何一个存储了明显很长的字符串。

【讨论】:

  • 感谢您的建议...我查明了问题——但在推送期间它没有解决原始的Taps Server Error: PGError: ERROR: integer out of range。我猜这无关紧要,所以我将发布一个单独的问题。
【解决方案2】:

正如@ChrisPratt 所说,我遇到了同样的问题,但无法找出问题所在。我的项目中只有一个应用程序,我删除了应用程序迁移文件夹中的 *py 文件(除了 init.py 文件)并清除了我的 sqlite3 db 中的所有表(我没有任何重要的当时的数据),然后运行迁移命令。成功了!。

【讨论】:

    猜你喜欢
    • 2011-04-17
    • 2021-09-09
    • 2020-04-07
    • 2022-11-18
    • 2016-05-30
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多