Django切换为Postgres数据库后使用db-backup无法恢复数据如何解决
报错根因
你的备份文件是SQLite数据库导出的SQL格式文件,其中包含SQLite独有的AUTOINCREMENT自增字段语法,而PostgreSQL使用SERIAL或IDENTITY实现自增逻辑,不识别该关键字,因此解析SQL时报语法错误。
正确迁移操作步骤
- 先将Django的数据库配置切换为PostgreSQL,执行
python manage.py migrate,在PostgreSQL中自动生成符合PostgreSQL语法规范的全部表结构,这一步会自动适配PostgreSQL的自增字段规则,不会出现不兼容的语法。 - 跨数据库迁移不要直接使用db-backup的全库SQL备份恢复,改用Django原生的数据库无关的fixture导出导入功能:
- 将数据库配置切回原SQLite,执行
python manage.py dumpdata --exclude contenttypes --exclude auth.permission > data.json,导出所有业务数据为通用JSON格式,导出内容不包含任何特定数据库的SQL语法。 - 再次将数据库配置切回PostgreSQL,执行
python manage.py migrate --run-syncdb确认所有表结构已创建完成。 - 执行
python manage.py loaddata data.json即可将原SQLite中的业务数据完整导入PostgreSQL。
- 将数据库配置切回原SQLite,执行
- 如果导入后出现缓存表缺失等问题,补充执行
python manage.py createcachetable即可。
内容的提问来源于stack exchange,提问作者Atif Shafi
相关产品推荐
相关产品推荐

