"FATAL: no pg_hba.conf entry for host" 但我可以通过 pgAdmin 连接

"FATAL: no pg_hba.conf entry for host" but I can connect trough pgAdmin

我在使用基于 CakePHP 的项目的开发环境时遇到了一些问题。 问题是,CakePHP 可以在生产环境中连接,但是如果我 运行 在我的 PC 上通过 XAMPP,然后抛出一个 FATAL: no pg_hba.conf entry for host "myexternalip", user "dbuser", database "dbname", SSL off

但使用相同的参数,我可以通过 pgAdmin 从我的 PC 连接。

我尝试了一些我发现的谷歌搜索技巧,比如将 libpq.dllc:\xampp\php 复制到 c:\xampp\apache\bin 但是,运气不好,检查了 pnp.iniextension=php_pdo_pgsql.dll 行未注释,曾多次尝试重启 apache 但没有任何变化

项目托管在heroku平台下,我的/app/config/database.php长得像

public $production = array(
    'datasource' => 'Database/Postgres',
    'persistent' => false,
    'host' => 'anywhere.at.amazonaws.com',
    'login' => 'dbuser',
    'password' => 'dbpwd',
    'database' => 'dbname',
    'encoding' => 'utf8',
);

这是堆栈跟踪

- CORE\Cake\Model\Datasource\DboSource.php line 260 → Postgres->connect()
- CORE\Cake\Model\ConnectionManager.php line 105 → DboSource->__construct(array)
- CORE\Cake\Model\Model.php line 3613 → ConnectionManager::getDataSource(string)
- CORE\Cake\Model\Model.php line 1155 → Model->setDataSource(string)
- CORE\Cake\Model\Model.php line 3640 → Model->setSource(string)
- CORE\Cake\Model\Model.php line 827 → Model->getDataSource()

谁能给我另一个有用的提示?

过了一会儿我找到了解决办法。

问题是这并不简单。

由于Postgres服务器托管在heroku平台下,服务器默认配置是require ssl,所以我遇到了这样的配置:

public $production = array(
    ......
    'sslmode' => 'require',
);

现在错误已更改为 sslmode value "require" invalid when ssl support is not compiled

然后我用谷歌搜索了一下,似乎至少在 XAMPP v5.5.19 下,PHP 文件夹中的 libpq.dll 没有使用 ssl 支持编译

这是帮助我解决这个问题的问题: How to installPostgreSQL client library for PHP on Windows with SSL enabled

似乎 pgAdmin 的 libpq.dll 是用 ssl 支持编译的,所以这就是我可以通过 pgAdmin 连接,而不是 php

的原因

感谢大家的帮助!