将sqlite数据库转换为postgres会产生DatabaseError:值太长,类型字符不同(50)

时间:2012-07-02 15:07:51

标签: django sqlite postgresql heroku

我正在使用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可能导致问题。

2 个答案:

答案 0 :(得分:2)

DatabaseError: value too long for type character varying(50)表示您尝试将长度超过50个字符的字符串存储到VARCHAR(50)类型中。您可以通过查看CharField max_length=50SlugField s(默认为max_length=50)的模型来清除潜在的候选人。然后,浏览一下initial_data.json灯具,看看是否注意到任何这些字段都存储了明显长的字符串。

答案 1 :(得分:0)

正如@ChrisPratt所说,我有同样的问题,但无法弄清楚问题。我的项目中只有一个应用程序,我在应用程序的迁移文件夹中删除了* py文件( init .py文件除外)并清除了我的sqlite3 db中的所有表格(我没有那时的任何重要数据)然后运行migrate命令。它奏效了!。