Navicat连接PostgreSQL报错:authentication method 10 not supported
前置说明
本文档目标场景:Windows下使用Navicat连接PostgreSQL遇到问题
如果你不是windows系统,或者不是使用Navicat连接,则本方案不一定适用。
报错1:
authentication method 10 not supported
问题原因
字面意思“验证方法不支持”
Navicat使用的身份验证算法和PostgreSQL不符
解决方案
- 找到pg_hba.conf文件:“你的PG安装路径\PostgreSQL\17\data\pg_hba.conf”
- 当前路径复制粘贴该,备份该配置文件
- 用编辑器打开,到文件末尾,注释掉原有的验证配置:
- 新增如下配置:
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
- 重启PG:windows搜索“服务”,找到系统服务管理器,然后找到名称包含“postgresql”字样的服务,然后点“重启动”
- 这样可能就解决了你的问题,但是很可能再报一个错误,这便是第2个报错:
报错2:
错误:字段"datlastsysoid"不存在
LINE 1: SELECT DISTINCT datlastsysoid FROM pg database
问题原因
字面意思datlastsysoid字段不存在
PG数据库表中删除了该字段
解决方案
修改Navicat libcc.dll动态运行库中的信息,将字段datlastsysoid
改为dattablespace
,需要使用到十六进制文件编辑器,这个方案看起来很难,实际上确实也不简单,但是按步骤对着操作也很容易,因为需要修改的字段长度相同,所以对应的十六进制值长度也相同,只要按照从左往右的顺序逐一修改即可。
- 找到libcc.dll文件:“你的Navicat安装路径\Navicat Premium 12\libcc.dll”
- 复制libcc.dll文件,当前路径粘贴,备份该文件
- 打开网站:https://hexed.it/,这是一个在线十六进制文件编辑工具(注意:一般的编辑器无法编辑动态运行库文件)
- 按如图所示顺序找到
SELECT DISTINCT datlastsysoid
这段代码,修改5、6标注的十六进制值:
原始值:
修改为:
注意:这里一定要找到“SELECT DISTINCT datlastsysoid”这段中的“datlastsysoid”,不能是其他的,因为源文件中有两个datlastsysoid
字段的用法(我的电脑是这样,其他版本可能不一样,以实际位置),我们只需要修改“SELECT DISTINCT datlastsysoid”这段中的“datlastsysoid”