我目前正在使用sqlite3作为我的一个Django项目的数据库.我想改变它以使用postgresql,我想保持所有数据完好无损.
我曾经./manage.py dumpdata > dump.json
创建过数据转储,并将我的设置更改为使用postgresql.首先尝试使用空数据库./manage.py loaddata dump.json
导致表中存在错误,因此我运行了./manage.py syncdb
,然后再次尝试.这导致了这个错误:
Problem installing fixture 'dump.json': Traceback (most recent call last): File "/usr/lib/python2.6/site-packages/django/core/management/commands/loaddata.py", line 163, in handle obj.save() File "/usr/lib/python2.6/site-packages/django/core/serializers/base.py", line 163, in save models.Model.save_base(self.object, raw=True) File "/usr/lib/python2.6/site-packages/django/db/models/base.py", line 495, in save_base rows = manager.filter(pk=pk_val)._update(values) File "/usr/lib/python2.6/site-packages/django/db/models/query.py", line 448, in _update return query.execute_sql(None) File "/usr/lib/python2.6/site-packages/django/db/models/sql/subqueries.py", line 124, in execute_sql cursor = super(UpdateQuery, self).execute_sql(result_type) File "/usr/lib/python2.6/site-packages/django/db/models/sql/query.py", line 2347, in execute_sql cursor.execute(sql, params) File "/usr/lib/python2.6/site-packages/django/db/backends/util.py", line 19, in execute return self.cursor.execute(sql, params) IntegrityError: duplicate key value violates unique constraint "django_content_type_app_label_key"
这不是将数据从一个数据库移动到另一个数据库的正确方法吗?
为了安全地切换DB后端,我应该怎么做?
Daniel Rosem.. 33
问题只是你得到的内容类型定义了两次 - 一次是你做的syncdb
,一次是你想要导入的导出数据.由于您的数据库中可能还有其他依赖于原始内容类型定义的项目,因此我建议您保留这些项目.
因此,在运行之后syncdb
,manage.py dbshell
在数据库中执行TRUNCATE django_content_type;
以及删除所有新定义的内容类型.那么你不应该在这个过程的任何部分发生任何冲突.
问题只是你得到的内容类型定义了两次 - 一次是你做的syncdb
,一次是你想要导入的导出数据.由于您的数据库中可能还有其他依赖于原始内容类型定义的项目,因此我建议您保留这些项目.
因此,在运行之后syncdb
,manage.py dbshell
在数据库中执行TRUNCATE django_content_type;
以及删除所有新定义的内容类型.那么你不应该在这个过程的任何部分发生任何冲突.