如何阻止moleculer服务重启时sequelize默认执行的DELETE查询
问题解决方案
根因说明
你遇到的自动执行DELETE查询的问题,核心是Sequelize或moleculer-db-adapter-sequelize的同步配置开启了强制重建表的参数,服务重启时会先清空/删除原有表再重建结构,就会触发DELETE甚至DROP TABLE操作。
修复步骤
- 调整Sequelize全局同步配置
找到你调用sequelize.sync()的代码位置,移除参数中的force: true配置,生产环境同时关闭alter: true,正确配置示例:// 初始化sequelize后的同步调用 await sequelize.sync({ force: false, // 必须设为false,true会删表重建 alter: false // 生产环境建议设为false,开发环境可开启用于自动调整表结构 }) - 调整moleculer-db服务的同步配置
检查对应数据服务的settings配置,将sync参数下的force改为false:module.exports = { name: "your-service-name", mixins: [DbService], adapter: new SequelizeAdapter(sequelize), model: YourModel, settings: { sync: { force: false, alter: false } } } - 排查服务生命周期钩子逻辑
检查created、started等服务启动时触发的生命周期钩子,确认是否有测试阶段添加的手动清空表的DELETE逻辑忘记删除。 - (推荐)改用迁移工具管控表结构
生产环境不要依赖Sequelize的自动同步功能,改用sequelize-cli做数据迁移,所有表结构变更都手写迁移脚本执行,彻底避免自动触发的删数据操作。
注意:
force: true仅可用于本地开发首次初始化测试数据的场景,绝对不能在生产环境配置,否则每次服务重启都会清空全表数据。
内容的提问来源于stack exchange,提问作者Sunny G
相关产品推荐
相关产品推荐

