You need to enable JavaScript to run this app. Windows10下Postgres13执行Sequelize迁移报Unknown authenticationOk错误
优惠活动
大模型
产品
解决方案
定价
更多

Windows10下Postgres13执行Sequelize迁移报Unknown authenticationOk错误

错误原因
  • 本质是pg驱动与PostgreSQL版本不兼容,和操作系统无关。
  • PostgreSQL 10起默认将scram-sha-256作为默认密码认证加密方案,你本地安装的PostgreSQL 13默认遵循该规则。
  • 项目依赖的pg@7.4.3发布于2017年,早于SCRAM认证普及的时间,没有实现对应的认证解析逻辑,无法识别PostgreSQL 13返回的认证报文,才会抛出这个未知消息类型的错误。原Ubuntu环境安装的PostgreSQL版本更低,默认使用MD5认证,因此可以正常运行。
修复方案

方案一:升级pg小版本(推荐,无需改动数据库)

sequelize@4.38.0兼容pg 7.x全量小版本,不需要升级sequelize,直接升级到7系列的最终正式版即可,该版本已经完整支持SCRAM-SHA-256认证,同时完全保留原有API。
注意不要升级到pg 8大版本,pg 8存在破坏性接口变更,sequelize 4未做适配,会引发其他兼容问题。

根据使用的包管理器执行对应命令:

# npm
npm install pg@7.18.2 --save

# yarn
yarn add pg@7.18.2

如果项目存在package-lock.json、yarn.lock这类版本锁文件,需要先删除锁文件和node_modules目录再重新安装依赖,否则锁文件会强制安装旧版pg。安装完成后重新执行npx sequelize db:migrate即可。

方案二:修改PostgreSQL认证方式为MD5

如果旧项目不允许调整依赖版本,可以降级本地PostgreSQL的认证规则适配老版pg驱动,该方案安全性更低,仅建议本地开发环境使用。

操作步骤:

  • 在Windows服务管理器中停止postgresql-x64-13服务
  • 打开PostgreSQL 13的数据目录,默认路径为C:\Program Files\PostgreSQL\13\data
  • 找到并打开postgresql.conf,搜索password_encryption配置项,去掉行首的注释符#,将值改为md5:
    password_encryption = md5
    
  • 同目录下找到并打开pg_hba.conf,将所有连接规则末尾的scram-sha-256全部改为md5,注意覆盖本地IPv4、IPv6等所有匹配当前连接场景的规则
  • 回到服务管理器,重新启动PostgreSQL 13服务
  • 重置项目所用数据库账号的密码:原有密码是SCRAM格式存储的,必须重设才会以MD5格式保存,可通过pgAdmin或psql执行如下SQL:
    ALTER USER 你的数据库用户名 WITH PASSWORD '你的数据库密码';
    
  • 配置完成后重新执行迁移命令即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 07:06:07