CakePHP无法连接PostgreSQL数据库的技术求助
嘿,看你遇到的情况:CakePHP一直报Postgres连接缺失,虽然MySQL能正常用,但PostgreSQL就是连不上,而且PHP启动时还弹模块加载错误——这明显是PHP的PostgreSQL模块没装好或者配置错了。我帮你一步步捋清楚:
1. 先搞定PHP模块路径的问题
从你给的php -v输出和php.ini配置来看,你指定的pdo_pgsql和pgsql模块路径完全不对!/var/lib/php5/modules/registry/这个路径下的文件要么是空的,要么根本不是正确的模块文件,所以才会提示“file too short”。
在Debian/Ubuntu上,装完php5-pgsql后,模块默认存在/usr/lib/php5/20131226/(和你的mysqli模块路径一致)。你得修改php.ini:
找到这两行错误配置:
extension=/var/lib/php5/modules/registry/pdo_pgsql extension=/var/lib/php5/modules/registry/pgsql
直接改成下面这样(要么用模块名让PHP自动查找,要么写完整正确路径):
extension=pdo_pgsql.so extension=pgsql.so
或者:
extension=/usr/lib/php5/20131226/pdo_pgsql.so extension=/usr/lib/php5/20131226/pgsql.so
另外,你的mysqli配置重复了,留一行extension=mysqli.so就行,别写两个。
2. 确认模块真的装好了
有时候apt-get install可能因为缓存问题没装到位,执行这个命令检查:
dpkg -l | grep php5-pgsql
如果输出开头是ii,说明安装成功;要是没输出,重新装一遍:
apt-get update && apt-get install --reinstall php5-pgsql
3. 重启PHP相关服务
改完php.ini必须重启服务才生效:
- 要是用Apache:
service apache2 restart - 要是用Nginx+PHP-FPM:
service php5-fpm restart - CLI模式的话不用重启,但最好重新开个终端测试。
4. 验证模块是否加载成功
执行这个命令,能看到PostgreSQL相关输出就说明没问题了:
php -i | grep -i pgsql
正常输出应该包含PostgreSQL Support => enabled和PDO Driver for PostgreSQL => enabled这些内容。
5. 检查CakePHP的数据库配置
最后别忘了确认app/Config/database.php里的Postgres配置是对的:
public $nuvi = array( 'datasource' => 'Database/Postgres', // 这个必须正确,不能写错 'persistent' => false, 'host' => 'localhost', // 你的PostgreSQL主机地址 'login' => '你的数据库用户名', 'password' => '你的数据库密码', 'database' => '要连接的数据库名', 'prefix' => '', );
注意datasource字段一定要是Database/Postgres,别和MySQL的配置搞混了。
额外排查点
要是还不行,先看看PostgreSQL服务是不是在跑:
service postgresql status
再检查PostgreSQL的pg_hba.conf里有没有允许PHP所在服务器的IP访问,以及数据库用户有没有对应数据库的访问权限。
内容的提问来源于stack exchange,提问作者briansexton

