Postgresql 如何将CakePHP连接到Postgres数据库?
我刚刚开始使用CakePHP,我顺利地完成了博客教程,但现在想用一个合适的DBMS(如postgres)来尝试它。我调整了database.php文件以指向我在本地postgres实例中创建的数据库:Postgresql 如何将CakePHP连接到Postgres数据库?,postgresql,cakephp,Postgresql,Cakephp,我刚刚开始使用CakePHP,我顺利地完成了博客教程,但现在想用一个合适的DBMS(如postgres)来尝试它。我调整了database.php文件以指向我在本地postgres实例中创建的数据库: class DATABASE_CONFIG { public $default = array( 'datasource' => 'Database/Postgres', 'persistent' => false, 'host
class DATABASE_CONFIG {
public $default = array(
'datasource' => 'Database/Postgres',
'persistent' => false,
'host' => 'localhost',
'port' => '5432',
'login' => 'cakephp',
'password' => 'cakephp',
'database' => 'cakephp',
'schema' => 'blog_tuto',
'prefix' => '',
//'encoding' => 'utf8',
);
public $test = array(
'datasource' => 'Database/Postgres',
'persistent' => false,
'host' => 'localhost',
'port' => '5432',
'login' => 'cakephp',
'password' => 'cakephp',
'database' => 'cakephp',
'schema' => 'blog_tuto',
'prefix' => '',
//'encoding' => 'utf8',
);
}
我使用SQL客户端连接到此数据库时没有问题,但CakePHP抱怨如下消息:
CakePHP is NOT able to connect to the database.
Database connection "Postgres" is missing, or could not be created.
Selected driver is not enabled
我已经验证了postgres DboSource类是否存在。还安装了postgres php模块:
$ php -m | grep pg
pdo_pgsql
pgsql
我错过了什么?谢谢
更新I:与Postgres相关的phpinfo输出如下:
pdo_pgsql
PDO Driver for PostgreSQL enabled
PostgreSQL(libpq) Version 9.1.9
Module version 1.0.2
Revision $Id: pdo_pgsql.c 321634 2012-01-01 13:15:04Z felipe $
pgsql
PostgreSQL Support enabled
PostgreSQL(libpq) Version 9.1.9
Multibyte character support enabled
SSL support enabled
Active Persistent Links 0
Active Links 0
Directive Local Value Master Value
pgsql.allow_persistent On On
pgsql.auto_reset_persistent Off Off
pgsql.ignore_notice Off Off
pgsql.log_notice Off Off
pgsql.max_links Unlimited Unlimited
pgsql.max_persistent Unlimited Unlimited
更新II:当我今天尝试访问应用程序时,意外地得到了一条不同的错误消息:“身份验证失败”——这意味着CakePHP现在可以连接了。几个月前我安装了Postgres 9.3,但没有重新创建教程对象;我所需要做的就是运行SQL脚本,教程应用程序现在可以完全正常运行了
任何错误都可能局限于Postgres 9.1 请确保您使用的模式是
blog_tuto
而不是public
,这是Postgresql中的默认模式。要测试它,请尝试将blog_tuto
切换为public
为了避免编码问题,我建议您删除编码行的注释,并将您在数据库中使用的编码放在那里(例如UTF-8、LATIN1) 这可以解决您的问题:
sudo apt-get install php5-pgsql
这可能是一个与Postgres 9.1相关的问题,Cake PHP在Postgres 9.3中工作得非常好。这不是一个真正的解决方案,但解决此问题的方法是:
database.php
配置指向Postgres 9.3(如果它在另一个端口中运行)我的配置:Windows7、IIS7.5、PHP5.3、PostRGRes9.4、CakePHP2.6.3 我刚才补充说:
extension=php\u pgsql.dll
extension=php\u pdo\u pgsql.dll
在php.ini文件末尾的所有扩展名之后(php.ini的开发副本)。
请记住,文件必须显示为C:\Program files(x86)\PHP\v5.3\ext(这是我的PHP安装路径)请检查PostGres模块是否已在web服务器中加载/激活。或者运行phpinfo();并检查是否可以看到Postgres模块已加载且可用。请将结果通知我们。
我已经验证了当前的postgres DboSource类
您已经在cli上执行了该操作,但错误消息来自Web服务器-它们不会使用相同的php.ini文件。AD7six,您在说什么客户端?据我所知,我所有的代码都在服务器端运行。我也有同样的问题,我在Mac OS X Mavericks中使用内置的Apache/PHP,我还在同一台服务器上使用Codeigniter,Codeigniter能够毫无问题地连接到postgres,我还制作了一个postgres测试脚本,它也能够连接到postgres,我仔细检查了我的cakePHP database.php配置文件,我可以检查什么?谢谢--public$default=array('datasource'=>'Database/Postgres','persistent'=>false,'host'=>'localhost','login'=>'cake','password'=>'cake','Database'=>'cake','schema'=>'cake');您是否尝试过检查CakePHP/Apache/Postgres日志?