Postgresql 如何将CakePHP连接到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

我刚刚开始使用CakePHP,我顺利地完成了博客教程,但现在想用一个合适的DBMS(如postgres)来尝试它。我调整了database.php文件以指向我在本地postgres实例中创建的数据库:

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中工作得非常好。这不是一个真正的解决方案,但解决此问题的方法是:

  • 备份Postgres 9.1托管的数据库

  • 安装Postgres 9.3(最终在替代端口中运行)

  • 将数据库还原到Postgres 9.3中

  • database.php
    配置指向Postgres 9.3(如果它在另一个端口中运行)

  • 删除Postgres 9.1(如果不需要)


  • 我的配置: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日志?