php连接postgresql提示认证失败_php连pg认证问题解决【方案】
技术百科
蓮花仙者
发布时间:2026-01-27
浏览: 次 pg_connect()报authentication failed的主因是pg_hba.conf中host规则未匹配PHP连接的IP+用户+数据库组合、localhost被解析为::1而配置仅含127.0.0.1/32、密码错误或用户无LOGIN权限、服务未重载配置、PHP连接串触发peer而非md5认证、scram-sha-256密码加密与旧版PHP不兼容。
pg_connect() 报错 authentication failed 的常见原因
不是密码错了就是认证方式不匹配。PostgreSQL 默认启用 peer 或 md5 认证,而 PHP 用 pg_connect() 连接时默认走 TCP(localhost 解析为 127.0.0.1),这时 pg 实际查的是 host 行的规则,而非 local 行 —— 很多人改了 local 却没

host,导致白忙活。
-
pg_hba.conf里host规则未覆盖 PHP 所用的 IP+用户+数据库组合 - PHP 连接串用了
localhost,但 PostgreSQL 把它解析成 IPv6 的::1,而pg_hba.conf只写了127.0.0.1/32 - 用户密码确实不对,或该用户没被赋予登录权限(
ALTER USER xxx WITH LOGIN;) - PostgreSQL 服务没重载配置:
sudo systemctl reload postgresql或pg_ctl reload
连接串写法直接影响认证路径
PHP 的 pg_connect() 参数顺序和关键字很关键。用 host=localhost 和 host=127.0.0.1 在 pg 看来是两条不同规则;前者可能触发 peer(仅限 Unix socket),后者强制走 TCP + md5。
- 要确保走 TCP 并用密码:显式写
host=127.0.0.1 port=5432 user=xxx password=yyy dbname=zzz - 避免只写
host=localhost,除非你确认pg_hba.conf有对应host ... localhost规则 - 测试连通性优先用命令行:
psql -h 127.0.0.1 -U your_user -d your_db,成功了再调 PHP
pg_hba.conf 必须匹配的三要素
每一行规则必须同时满足「连接方式 + 客户端地址 + 数据库 + 用户」才生效。漏掉任意一个,就 fallback 到下一行,最终可能落到 reject。
- 加一行明确的 host 规则,例如:
host all all 127.0.0.1/32 md5(开发环境够用) - 如果 PHP 和 PostgreSQL 不在同一机器,把
127.0.0.1/32换成实际来源 IP 或网段,如192.168.1.0/24 - 修改后必须重载,
SELECT pg_reload_conf();也行,但要注意权限 - 检查当前生效规则:
sudo -u postgres psql -c "SELECT * FROM pg_hba_file_rules();"
密码加密方式不兼容也会失败
PostgreSQL 10+ 默认用 scram-sha-256 加密存储密码,但老版本 PHP 的 pgsql 扩展(尤其 php7.4 及更早)不支持该机制,会静默降级失败。
- 临时方案:在
postgresql.conf中设password_encryption = md5,然后ALTER USER xxx WITH PASSWORD 'yyy'; - 长期方案:升级 PHP 到 8.0+,并确认
pgsql扩展编译时链接了足够新版本的 libpq - 验证密码加密方式:
SELECT rolname, rolpassword FROM pg_authid WHERE rolname = 'your_user';,若含SCRAM-SHA-256字样即为新格式
实际调试时,最省时间的做法是先关掉所有干扰:临时把 pg_hba.conf 最上面加一行 host all all 127.0.0.1/32 trust,确认 PHP 能连上,再逐步收紧规则。很多人卡在以为问题出在代码,其实只是配置没对齐。
# ai
# 的是
# 很多人
# 把它
# 写了
# 用了
# 也会
# 而非
# 两条
# word
# 数据库
# select
# 错了
# php
# postgresql
# 开发环境
# php7
# ipv6
# unix
# 不兼容
# yy
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Windows Defender扫描失败怎么办_安
- 如何使用正则表达式批量替换重复的星号-短横模式为固
- php增删改查需要哪些扩展_开启mysqli或pd
- Win10如何卸载微软拼音输入法 Win10只保留
- Win11怎么开启游戏模式_Win11优化游戏帧数
- PHP怎么接收前端传的时间戳_处理时间戳参数转换技
- Mac如何与安卓手机传文件_Mac和Android
- Windows系统时间服务错误_W32Time服务
- Win11怎么关闭贴靠布局_Win11禁用窗口最大
- 使用类变量定义字符串常量时如何实现类型安全的 Li
- 如何解决同一段404代码在不同主机上表现不一致的问
- Win11怎么设置单手模式_Win11触控键盘布局
- Mac版Final Cut Pro入门_Mac视频
- 如何使用正则表达式批量替换重复的 *- 模式为固定
- 手机php怎么转mp4_手机端php文件转mp4a
- PHP主流架构如何做单元测试_工具与流程【详解】
- C#怎么使用委托和事件 C# delegate与e
- Python异步网络编程_aiohttp说明【指导
- c++如何用AFL++进行模糊测试 c++ Fuz
- 如何在 Go 中比较自定义的数组类型(如 [20]
- 如何使用Golang实现函数指针_函数变量与回调示
- Win11怎么恢复旧版开始菜单_通过软件还原Win
- c# await 一个已经完成的Task会发生什么
- PythonPandas数据分析教程_数据清洗与处
- 如何解决Windows时间不准的问题?(自动同步设
- Win11怎么设置默认终端应用_Windows11
- Windows电脑如何截屏?(四种快捷方法)
- Win11关机界面怎么改_Win11自定义关机画面
- Win10怎么更改用户名 Win10修改账户名称操
- Windows10电脑怎么设置虚拟光驱_Win10
- Win11怎么设置虚拟键盘_打开Win11屏幕键盘
- PHP 中如何在函数内持久修改引用变量所指向的目标
- MAC如何安装Git版本控制工具_MAC开发环境配
- mac怎么查看wifi密码_MAC查看已连接WiF
- 如何提升Golang程序I/O性能_Golang
- LINUX如何删除用户和用户组_Linux use
- PHP 中如何在函数内持久化修改引用变量的指向
- mac怎么退出id_MAC退出iCloud账号与A
- php下载安装后swoole扩展怎么安装_异步框架
- Win10怎么限制单程序CPU占用上限_Win10
- 用lighttpd能运行php吗_lighttpd
- 如何在Golang中捕获结构体方法错误_Golan
- 如何在Mac上搭建Golang开发环境_使用Hom
- 如何在Golang中处理模块冲突_解决依赖版本不兼
- c++中如何对数组进行排序_c++数组排序算法汇总
- Windows 10怎么把任务栏放在屏幕上方_Wi
- Windows驱动无法加载错误解决方法_驱动签名验
- Win11怎么设置闹钟_Windows 11时钟应
- 如何在Golang中实现CI/CD流水线自动化测试
- Win11怎样彻底卸载自带应用_Win11彻底卸载

QQ客服