跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

phpEnv安装PostgreSQL教程 phpEnv配置多类型数据库

phpEnv 不能一键安装 PostgreSQL,它仅内置 MySQL、MariaDB 和 SQLite;使用 PostgreSQL 需手动安装服务端并启用 PHP 的 pgsql 扩展,否则调用 pg_connect() 或 PDO 连接会报“function not found”或“could not find driver”错误。 php Env 本身不内置 PostgreSQL,也不能直接安装或管理 PostgreSQL 实例。它只负责 PHP、Apache/Nginx、MySQL 的集成与切换。想在 phpEnv 环境中使用 PostgreSQL,必须手动安装 PostgreSQL 并配置 PHP 的
pgsql
扩展——否则
pg_connect()
会报“function not found”或“undefined function”错误。 phpEnv 能否一键装 PostgreSQL? 不能。phpEnv 的官方安装包(截至 2026 年 4 月)仅包含 MySQL(5.7/8.0)、MariaDB 和 SQLite 支持, 不含 PostgreSQL 二进制文件、服务管理脚本或初始化工具 。试图在 phpEnv 控制面板里找“PostgreSQL 安装按钮”会落空。 常见误操作包括: 在 phpEnv 设置里勾选“启用 PostgreSQL”——该选项实际不存在,是用户凭经验脑补的 把 PostgreSQL 的
bin
目录加进系统 PATH 后,以为 phpEnv 自动识别——但 phpEnv 不读取外部 PostgreSQL,只管自己 bundled 的 MySQL 用 phpEnv 启动 Apache 后,直接在 PHP 脚本里调用
pg_connect()
——必然失败,因
pgsql
扩展未启用 手动装 PostgreSQL + 配 PHP 的 pgsql 扩展 Windows 下推荐用 EnterpriseDB 官方安装包 (如 PostgreSQL 14.12 或 15.7),安装时勾选 “Add to PATH” 和 “Initialize database cluster”。装完后验证: 立即学习 “ PHP免费学习笔记(深入) ”;
psql --version
若输出版本号,说明服务端就绪。接着配 PHP: 找到 phpEnv 当前激活的 PHP 版本目录,例如
C:\phpenv\versions\8.3.13\
编辑
php.ini
,取消注释这一行:
extension=pgsql
(不是
php_pdo_pgsql.dll
,那是旧写法) 确认
extension_dir
指向正确的
ext
目录,例如
extension_dir = "C:\phpenv\versions\8.3.13\ext"
重启 phpEnv 的 Apache 服务(或整个控制面板),再运行
php -m | findstr pgsql
,应看到
pgsql
pdo_pgsql
漏掉任意一步,
new PDO('pgsql:host=127.0.0.1;dbname=test', $u, $p)
都会抛出
PDOException: could not find driver
。 PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。 下载 ThinkPHP/Laravel 中配置多类型数据库(MySQL + PostgreSQL) 框架层面可以共存,但需严格区分连接名和驱动。以 ThinkPHP 6 为例: 在
.env
中定义两个独立区块:
[DATABASE] TYPE=mysql HOSTNAME=127.0.0.1 DATABASE=shop_db USERNAME=root PASSWORD=123456 [DATABASE_PG] TYPE=pgsql HOSTNAME=127.0.0.1 DATABASE=log_db USERNAME=postgres PASSWORD=123456 HOSTPORT=5432
然后在
config/database.php
中显式声明连接:
'connections' => [ 'mysql' => [ 'type' => env('DATABASE_TYPE', 'mysql'), 'hostname' => env('DATABASE_HOSTNAME', '127.0.0.1'), // ... 其他 MySQL 参数 ], 'pgsql' => [ 'type' => env('DATABASE_PG_TYPE', 'pgsql'), 'hostname' => env('DATABASE_PG_HOSTNAME', '127.0.0.1'), 'hostport' => env('DATABASE_PG_HOSTPORT', '5432'), // ... 其他 PostgreSQL 参数 ], ]
关键点: 不同数据库必须用不同连接名(如
mysql
pgsql
),不能都叫
default
ThinkPHP 不自动加载
DATABASE_PG_*
前缀变量,必须在 config 里显式调用
env()
读取 执行前务必清空缓存:
php think clear:config
,否则改了
.env
也无效 最易被忽略的是:PostgreSQL 的
pg_hba.conf
默认拒绝所有远程连接,即使本地 PHP 脚本用
127.0.0.1
连,也可能被拦在门外。检查该文件末尾是否含这行:
host all all 127.0.0.1/32 scram-sha-256
。没有就加,加完要重启 PostgreSQL 服务。

相关文章