为什么我的Sequelize V6版本数据库同步功能无法正常生效?
可能的错误原因
- 模型未在调用
sequelize.sync()前完成注册/导入:很多开发者会把模型定义拆分到独立文件,但如果在调用sync方法前没有主动require/import对应的模型文件,sequelize不会感知到这些模型的存在,自然不会创建对应表 sync方法默认不会覆盖已存在的表:如果对应名称的表已经在数据库中存在,默认的sequelize.sync()不会执行任何创建/修改操作,也不会抛出错误。如果需要强制重建表可以改用sequelize.sync({ force: true })(注意该操作会清空原有表数据,生产环境禁用),需要修改已存在表结构可以用sequelize.sync({ alter: true })- 模型配置的表名与预期不符:检查模型定义中是否手动指定了
tableName参数,或者sequelize全局配置开启了表名自动复数化,导致实际创建的表名和你预期的名称不一致,你可以先查询数据库中所有表名确认是否有匹配的表 - 数据库连接实例指向错误的库/用户权限不足:检查
./db中获取的连接实例对应的数据库是否是你检查的目标库,同时确认连接使用的数据库账号拥有建表权限,部分低权限账号执行建表操作不会抛出显式错误但实际不会生效 - 异步逻辑执行顺序错误:确认
await sequelize.sync()是在所有模型定义完成之后执行,且代码中没有提前退出、未捕获的静默异常,你可以在sync执行前后打印sequelize.models的内容,确认所有预期的模型都已经被正确加载到实例中 - 事务未提交:如果你的代码中开启了全局事务包裹sync操作,且后续没有显式提交事务,建表操作会随事务回滚失效,自然不会在数据库中持久化
- 多schema场景下表创建到非默认schema下:如果你使用的是PostgreSQL这类支持schema的数据库,且模型指定了非public的schema,或者全局配置了其他默认schema,表会创建到对应schema下,检查时需要切换到对应schema才能看到对应表
内容的提问来源于stack exchange,提问作者Shamoon
相关产品推荐
相关产品推荐

