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

部署更新Django代码时DigitalOcean托管PostgreSQL数据库自动重置如何解决?

Django on DigitalOcean 自动部署后数据库重置解决方案

核心根因

DigitalOcean 托管服务本身不会主动重置 PostgreSQL 数据库内容,所有数据清空都是部署流程中执行的数据库操作导致的,这类问题90%以上和migration管理不规范、部署钩子配置错误有关。

排查与修复步骤

  • 第一步:先备份现有数据,避免后续操作再次丢失数据
    执行数据库备份命令:
    pg_dump -h <你的DO数据库主机地址> -p <端口> -U <数据库用户名> -d <数据库名> > prod_backup.sql
  • 第二步:修正migration管理逻辑,禁止随意删除历史migration文件
    删除所有migration文件的操作是直接诱因:
    1. 恢复上一版正常运行的代码,找回所有历史migration文件,确保本地存储的migration记录和生产库中django_migrations表的记录完全一致。
    2. 后续开发过程中的表结构变更,一律通过python manage.py makemigrations生成新的增量migration文件,随代码提交,禁止删除已应用到生产环境的历史migration。
  • 第三步:检查部署配置,移除危险操作
    打开DigitalOcean对应应用的部署配置,找到「部署钩子/Deploy Hook」「运行命令/Run Command」配置项:
    1. 仅保留python manage.py migrate作为部署后的数据库操作命令,删除所有flush、reset_db、loaddata(未确认不会覆盖现有数据的前提下)、migrate --fake-initial之类的命令。
    2. 如果使用Gitlab CI,同步检查.gitlab-ci.yml中的部署脚本,确认没有自动执行数据库重置、覆盖的命令。
  • 第四步:验证修复效果
    把备份的数据库数据导回生产库,提交一个无业务影响的测试变更触发自动部署,确认部署完成后数据没有丢失、表结构正常。

DO默认的Django部署模板只会自动执行migrate命令,只要管理好migration文件、没有配置额外的危险操作,不会出现自动清空数据库的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:36:04