首要原因是php未安装或未启用pgsql扩展;linux下用php -m | grep pgsql验证,无输出需sudo apt install php-pgsql,windows需在php.ini中启用php_pdo_pgsql.dll和php_pgsql.dll。

确认PHP已启用pgsql扩展
PostgreSQL连接失败的首要原因,往往是PHP没装或没启pgsql扩展。在Linux下运行php -m | grep pgsql,若无输出,需安装:sudo apt-get install php-pgsql(Ubuntu/Debian)或sudo yum install php-pgsql(CentOS/RHEL)。Windows用户则需检查php.ini中是否取消了extension=php_pgsql.dll的注释,并确认php_pdo_pgsql.dll也已启用。
修改application/config/database.php配置项
CodeIgniter 3.x默认不带PostgreSQL驱动,但原生支持——只需把dbdriver设为postgre(注意不是postgresql),其他关键参数如下:
-
hostname:数据库服务器地址,瀚高V9.0常为192.168.x.x或localhost; -
username和password:必须是数据库用户(如postgres),且该用户需有目标库的CONNECT和USAGE权限; -
database:库名,瀚高V9.0初始化后默认库通常是highgo或postgres,不能填错大小写; -
port:PostgreSQL默认5432,瀚高V9.0若改过端口(如6432),此处必须同步; -
schema:PostgreSQL特有,CodeIgniter 3.x需手动加这一行,值一般为public,否则get()可能查不到表;
示例片段:
$db['default'] = array( 'dbdriver' => 'postgre', 'hostname' => '192.168.10.5', 'username' => 'hguser', 'password' => 'hgpass123', 'database' => 'myapp', 'port' => 6432, 'schema' => 'public' );
瀚高V9.0特有的兼容性处理
瀚高V9.0虽基于PostgreSQL内核,但部分Oracle兼容特性会影响CodeIgniter行为:
- 若建表时用了双引号定义大小写敏感的表名(如
"Student"),CodeIgniter的$this->db->from('student')会查不到——必须严格匹配引号内的大小写,或改用小写建表; - 瀚高默认开启
oracle_compatible_mode时,OFFSET/LIMIT语法可能被重写,导致limit(10, 20)生成错误SQL;建议在database.php中显式关闭:'emulate_prepares' => false,并确保pg_driver.php未被魔改; - 连接时若报
SSL is not enabled on the server,不是错误而是提示——瀚高V9.0默认禁用SSL,需在配置中加'ssl' => false字段,否则某些版本的pg_connect会拒绝连接。
测试连接与常见报错定位
写个最简控制器验证是否连通:
class Dbtest extends CI_Controller {
public function index() {
$this->load->database();
$result = $this->db->query("SELECT version()")->row();
echo $result->version;
}
}
典型报错及对应动作:
-
Unable to connect to your database server using the provided settings:先用psql -h host -U user -d db命令行直连,排除网络/认证问题; -
ERROR: relation "xxx" does not exist:检查schema配置、表名大小写、以及是否在正确库中建表; -
Call to undefined method CI_DB_postgre_driver::list_tables():说明驱动文件损坏或版本错配,应使用CodeIgniter 3.1.13+官方包,勿混用旧版pg_driver.php。
瀚高V9.0的Oracle兼容层会让某些元数据查询变慢,首次连接后务必清空system/cache/db_cache/目录,避免缓存残留导致后续查询异常。











