MacOS下PHP连接PostgreSQL报错:Call to undefined function pg_Connect()
解决MacOS下PHP调用pg_connect()报错的问题
你遇到的Call to undefined function pg_connect()确实是因为PHP的PostgreSQL扩展没正确加载——虽然你通过brew安装了带PostgreSQL支持的PHP 5.5,但默认情况下这个扩展可能没启用,或者系统还在使用自带的PHP版本。下面一步步帮你排查解决:
1. 确认当前使用的PHP版本是brew安装的PHP 5.5
MacOS自带了PHP,很可能你终端或服务器用的还是系统默认版本,而非brew装的那个。
- 终端执行:
php -v,看输出的版本是不是5.5.x,如果不是,说明需要调整PATH优先级:
编辑你的shell配置文件(比如~/.zshrc或~/.bash_profile),添加一行:
然后执行export PATH="/usr/local/opt/php55/bin:$PATH"source ~/.zshrc(对应你的配置文件),再重新运行php -v确认版本切换成功。
2. 检查PostgreSQL扩展文件是否存在
brew安装PHP55时带了PostgreSQL扩展,但得确认文件在扩展目录里:
- 执行
php -i | grep extension_dir,找到扩展目录路径(比如/usr/local/Cellar/php55/5.5.38/lib/php/extensions/no-debug-non-zts-20121212/) - 进入这个目录,查看是否有
pgsql.so和pdo_pgsql.so两个文件:
如果没有,可能需要重新安装PHP55并指定PostgreSQL:ls /path/to/extension_dir | grep pgsqlbrew reinstall php55 --with-postgresql
3. 启用PHP的PostgreSQL扩展
找到PHP的配置文件php.ini,然后添加扩展配置:
- 执行
php --ini,找到Loaded Configuration File对应的路径(如果显示(none),可以复制/usr/local/etc/php/5.5/php.ini.default为php.ini) - 编辑php.ini,找到
Dynamic Extensions部分,添加两行:
注意:有些版本的PHP配置里可能只需要写extension=pgsql.so extension=pdo_pgsql.soextension=pgsql,但PHP5.5还是需要带.so后缀。
4. 重启本地服务器
根据你使用的服务器类型重启:
- 如果用的是brew装的PHP-FPM:
brew services restart php55 - 如果用的是Apache(比如系统自带或brew装的):
sudo apachectl restart
5. 验证扩展是否加载成功
- 终端执行
php -m | grep pgsql,如果输出pgsql和pdo_pgsql,说明扩展已加载; - 或者写一个简单的PHP文件
info.php,内容为<?php phpinfo(); ?>,在浏览器打开,搜索"PostgreSQL",如果能找到对应的配置区块,就说明扩展生效了。
完成这些步骤后,再运行你的PHP脚本,应该就能正常调用pg_connect()了。
内容的提问来源于stack exchange,提问作者Amish Bedi
相关产品推荐
相关产品推荐

