You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django 4.1从SQLite迁移至PostgreSQL时Boolean字段迁移报错

解决Django 4.1从SQLite切换PostgreSQL迁移报错问题

问题根源

SQLite中BooleanField实际以integer(0/1)存储,但PostgreSQL对类型转换有严格限制,自动生成的迁移脚本直接尝试将smallint转为boolean会触发语法错误;修改字段类型后,旧迁移记录的冲突会导致sessions、contenttype等依赖表无法正常迁移。

具体解决步骤

1. 清理冲突迁移记录

  • 删除目标应用migrations目录下除__init__.py外的所有迁移文件
  • 清空PostgreSQL数据库中的django_migrations表,执行SQL语句:
    TRUNCATE TABLE django_migrations;
    

2. 确认模型字段定义

确保Item模型的isProduct字段定义正确:

from django.db import models

class Item(models.Model):
    isProduct = models.BooleanField(default=True)
    # 其他字段定义...

3. 生成适配PostgreSQL的新迁移

在项目根目录执行命令:

python manage.py makemigrations

此操作会生成全新的、适配PostgreSQL的迁移脚本,避免类型强制转换的问题。

4. 执行迁移操作

先标记核心系统表已完成初始迁移,再执行全量迁移:

python manage.py migrate --fake-initial
python manage.py migrate

--fake-initial参数会跳过sessions、contenttype等系统表的初始迁移检查,避免依赖阻塞。

5. 存量数据迁移(如有需要)

若SQLite中有需要迁移的数据,先导出为JSON格式:

python manage.py dumpdata > data.json

切换到PostgreSQL环境后导入数据:

python manage.py loaddata data.json

PostgreSQL会自动将原数据中的0/1转换为布尔值(False/True)。

注意事项

  • 不同数据库类型的迁移脚本无法直接复用,需针对目标数据库重新生成
  • 开发阶段尽量保持数据库环境一致,减少跨数据库适配成本

内容的提问来源于stack exchange,提问作者limitededition

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 09:24:23