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

Luí*_*usa 5 postgresql cakephp

我刚刚开始使用 CakePHP,我顺利地完成了博客教程,但现在想使用像 postgres 这样的适当的 DBMS 来尝试它。我调整了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',
    );
}
Run Code Online (Sandbox Code Playgroud)

我使用 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
Run Code Online (Sandbox Code Playgroud)

我已经验证了 postgres DboSource 类是否存在。postgres php 模块也已安装:

$ php -m | grep pg
pdo_pgsql
pgsql 
Run Code Online (Sandbox Code Playgroud)

我缺少什么?谢谢。

更新 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
Run Code Online (Sandbox Code Playgroud)

更新 II:当我今天访问该应用程序并尝试遵循Ajir 的建议时,我惊讶地收到了一条不同的错误消息:“身份验证失败”——这意味着 CakePHP 现在可以连接。我几个月前安装了 Postgres 9.3,并且没有重新创建教程对象;我所需要做的就是运行 SQL 脚本,教程应用程序现在已完全正常运行。

无论出现什么问题,都可能仅限于 Postgres 9.1。

Luí*_*usa 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(如果不需要)。