如何将CakePHP连接到Postgres数据库?

时间:2014-01-06 11:01:45

标签: postgresql cakephp

我刚刚开始使用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 

我错过了什么?感谢。

更新我:与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 :当我今天访问应用程序尝试关注Ajir's suggestion时,我出乎意料地收到了一条错误消息:“身份验证失败” - 意味着CakePHP现在可以连接。几个月前我安装了Postgres 9.3并没有重新创建教程对象;我需要做的就是运行SQL脚本,教程应用程序现在完全正常运行。

任何错误都可能仅限于Postgres 9.1。

4 个答案:

答案 0 :(得分:1)

这可以解决您的问题:

sudo apt-get install php5-pgsql

答案 1 :(得分:0)

这可能是与Postgres 9.1相关的问题,Cake PHP与Postgres 9.3完美搭配。这不是一个真正的解决方案,但解决这个问题的方法是:

  1. 备份Postgres 9.1托管的数据库。

  2. 安装Postgres 9.3(最终在另一个端口运行)。

  3. 将数据库恢复为Postgres 9.3。

  4. database.php配置指向Postgres 9.3(如果它在备用端口中运行)。

  5. 删除Postgres 9.1(如果不需要)。

答案 2 :(得分:0)

我的配置:Windows 7,IIS 7.5,php 5.3,postrgres 9.4,cakephp 2.6.3

我刚刚补充道:

extension=php_pgsql.dll extension=php_pdo_pgsql.dll

在所有扩展(php.ini开发副本)之后的php.ini文件的末尾。 请记住,必须提供文件C:\ Program Files(x86)\ PHP \ v5.3 \ ext(这是我的php安装路径)

答案 3 :(得分:-1)

请确保您使用的架构是blog_tuto而不是public,这是Postgresql中的默认设置。要对其进行测试,请尝试使用blog_tuto切换public

为了避免编码问题,我建议您删除编码行的注释,并将您在数据库中使用的编码放在那里(例如UTF-8,LATIN1);