先确认问题层级

手工添加的列在setup:upgrade后消失。Declarative Schema以启用模块声明为目标状态,数据库不是唯一事实来源。

从备份确认列定义和数据,明确哪个业务模块拥有字段,不立即重复ALTER生产。

在自定义模块db_schema.xml声明列、索引和约束;修改他人表也由自己的模块声明新增部分。

修复方法

  • 按版本流程生成db_schema_whitelist.json,并在预发布运行setup:db:status查看计划。
  • 先部署声明创建列,再按主键从备份回填;必要迁移用幂等Data Patch。
bin/magento setup:db:status
bin/magento setup:db-declaration:generate-whitelist --module-name=Vendor_Module
SHOW CREATE TABLE target_table;
bin/magento setup:upgrade

怎样才算解决

连续两次升级列都保留,全新安装结构一致,回填数量与备份相符,应用正常读写。