Windows下PSQL连接含大写字母PostgreSQL用户认证失败求助
解决Windows psql无法连接含大写字母PostgreSQL用户的问题
核心原因
PostgreSQL对标识符(包括用户名)的大小写规则:
- 创建用户时如果用双引号包裹(如
CREATE USER "myUSER"),用户名会保留大小写,属于大小写敏感 - 连接时如果未用双引号包裹用户名,PostgreSQL会自动将其转为小写去匹配,导致无法找到对应的大写用户
Linux本地连接正常是因为shell参数处理逻辑让-U myUSER被psql正确识别为带大写的用户名,而Windows cmd的参数解析逻辑不同,未加引号的大写用户名会被错误处理,导致PostgreSQL收到小写的myuser,进而触发认证失败。
解决步骤
1. 在Windows命令中给用户名加双引号
修改psql命令,将-U myUSER改为带双引号的形式,注意Windows cmd的引号转义:
"C:\Program Files\PostgreSQL\16\bin"\psql -qAt -F '' -h myPGserver -U "\"myUSER\"" -W -d mydb -p 5432
如果使用PowerShell,引号格式略有不同:
& "C:\Program Files\PostgreSQL\16\bin\psql" -qAt -F '' -h myPGserver -U '"myUSER"' -W -d mydb -p 5432
2. 验证PostgreSQL日志中的用户名
登录Linux服务器,查看PostgreSQL日志文件(通常在/var/log/postgresql/目录下),找到连接失败的日志条目:
- 如果日志显示
FATAL: password authentication failed for user "myuser",说明用户名被转为小写,必须用双引号包裹才能匹配 - 如果日志显示
FATAL: password authentication failed for user "myUSER",则需要再次确认密码一致性,或检查认证方式兼容性
3. 确认认证方式兼容性
检查PostgreSQL服务器的pg_hba.conf文件,确认对应Windows主机的认证方式(如md5或scram-sha-256):
- PostgreSQL 10+默认推荐
scram-sha-256,Windows的psql 16版本完全支持该认证方式,无需担心兼容性 - 如果是旧版本认证方式,可临时将对应规则改为
md5测试是否能正常连接
内容的提问来源于stack exchange,提问作者Frank
相关产品推荐
相关产品推荐

