Sequelize CLI是Node.js生态中强大的数据库迁移工具,需先确保Node/npm全局可用、本地安装sequelize-cli及sequelize依赖,再通过npx sequelize init初始化项目并配置数据库,最后用db:migrate等命令管理版本化迁移。

VSCode 本身不自带 Node 环境,也不直接执行 sequelize 命令——你得先让终端能认出 node 和 npx sequelize,否则所有迁移命令都会报 command not found 或 Cannot find module 'sequelize'。
确认 Node 和 npm 已全局可用
这是最常卡住的第一步。很多人在 VSCode 终端里跑 node -v 报错,其实是系统 PATH 没生效,或 VSCode 启动方式绕过了 shell 配置。
- 在系统终端(不是 VSCode 内置终端)里运行
node -v和npm -v,必须有输出;没输出就先装 Node.js(推荐用 官网 LTS 版) - VSCode 内置终端默认继承系统 shell,但 Windows 上若用 PowerShell 启动,可能因执行策略被禁:运行
get-ExecutionPolicy,若返回Restricted,需在管理员 PowerShell 中执行set-ExecutionPolicy RemoteSigned -Scope CurrentUser - Mac/Linux 用户如果用 zsh,确保
~/.zshrc里有export PATH="$HOME/.npm-global/bin:$PATH"(如果你用npm config set prefix ~/.npm-global改过全局路径)
项目级依赖必须本地安装 sequelize-cli
别信“全局装了 sequelize-cli 就够用”——VSCode 终端默认优先找本地 node_modules/.bin 下的二进制,全局安装反而容易版本冲突或权限问题。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
- 在项目根目录运行:
npm install --save-dev sequelize-cli - 验证是否可用:
npx sequelize --version(必须输出版本号,不是报错) - 如果提示
Cannot find module 'sequelize',说明你只装了sequelize-cli,漏了运行时依赖:npm install sequelize -
sequelize init生成的config/config.json里填的数据库密码、host 等,必须和你本地 MySQL/PostgreSQL 实际运行状态一致,否则db:migrate会卡在连接超时
迁移文件生成后,up 函数里别直接写 SQL 字符串
Sequelize CLI 生成的迁移文件默认导出 up 和 down 两个函数,参数是 queryInterface 和 Sequelize。这里最容易犯错的是把原生 SQL 当成唯一解法。
- 新增字段用
queryInterface.addColumn('Users', 'email', { type: Sequelize.STRING }),不是queryInterface.sequelize.query("ALTER TABLE ...") - 改字段类型(比如
STRING→TEXT)在 PostgreSQL 里要加using子句,但 Sequelize 不自动处理——此时应手动用queryInterface.sequelize.query,并确保down函数能逆向还原 - 删除字段前,务必检查是否有外键约束;MySQL 8.0+ 默认开启严格模式,
dropColumn可能失败,需先removeConstraint - 所有迁移操作都应幂等:重复执行
db:migrate不应报错,up里不要写CREATE TABLE IF NOT EXISTS这类非标准语句(Sequelize 不识别)
db:migrate 执行失败时,先看 SequelizeMeta 表
Sequelize CLI 会在数据库里建一张 SequelizeMeta 表,记录哪些迁移已执行。它不是日志,而是迁移状态的唯一权威来源。
- 如果某次
db:migrate卡住或报错,别急着删表重来——先查SELECT * FROM "SequelizeMeta";(PostgreSQL 注意双引号,MySQL 不需要) - 发现某条迁移名已存在但实际没生效?手动删掉那行记录,再重跑即可;别删整个表,否则历史全丢
- 想回退一步?用
npx sequelize db:migrate:undo,它会自动找上一条并执行对应down函数;想撤销全部?npx sequelize db:migrate:undo:all - 生产环境严禁
db:migrate:undo——因为down函数未必能真正恢复数据(比如bulkDelete是不可逆的)
真正麻烦的从来不是命令怎么敲,而是迁移文件里 up 和 down 的逻辑是否覆盖了目标数据库的实际行为差异,尤其是 MySQL 和 PostgreSQL 对 NULL、DEFAULT、AUTO_INCREMENT 的处理完全不同。动手前,先在本地用目标数据库版本跑一遍 up + down。

















