Laravel:PHP Artisan Migrate 抛出 PDO 异常:找不到驱动程序(Postgres)

Posted

技术标签:

【中文标题】Laravel:PHP Artisan Migrate 抛出 PDO 异常:找不到驱动程序(Postgres)【英文标题】:Laravel: PHP Artisan Migrate throws PDO Exception: Could not find driver (Postgres) 【发布时间】:2017-08-02 15:11:19 【问题描述】:

操作系统: Ubuntu 16.10

服务器: nginx

数据库: PostgreSQL 9.5.4

Laravel 5.4

尝试执行我的数据库迁移,但php artisan migrate 抛出以下错误:

[照亮\数据库\查询异常] 找不到驱动程序:(SQL select * from information_schema.tables where tables_schema = username and table_name = migrations)

接着是第二条消息说明

[PDO异常]

找不到驱动程序

我做了以下事情:

    验证我安装了php-pgsql的最新版本 取消注释 /etc/php/7.0/fpm/php.ini 中与 php_pdo_pgsql.dll 相关的行 多次重启 posgtresql 和 nginx

目前,当我运行 php -i 时,我得到的 PDO 部分的输出是

PDO 支持 => 启用

PDO 驱动程序 => pgsql

pdo_pgsql 部分产生

PostgreSQL(libpq) 版本 =>9.5.4

模块版本 =>7.0.15-0ubuntu0.16.10.4

然后 pgsql 部分返回

PostgreSQL(libpq) 版本 = 9.5.4

PostgreSQL(libpq) => x86_64-pc-linux-gnu 上的 PostgreSQL 9.5.4,由 gcc (Ubuntu 6.1.1-11ubuntu12) 6.1.1 编译 20160805,64 位多字节字符 支持 => 启用

SSL 支持 => 启用

活动持久链接 => 0

活动链接 => 0

但尽管如此,仍然得到同样的错误。我认为这可能是权限问题,但以 root 或 www-data 身份运行命令具有相同的结果。

【问题讨论】:

如果你使用的是php-fpm,除了重启web服务器(nginx/apache)之外,你需要重启它 【参考方案1】:

你需要定义你的 .env 文件

在 your.env 文件中,您需要指定您使用的数据库(mysql、SQLite、Postgres)并指定您的数据库用户名和密码

APP_ENV=local
APP_KEY=base64:gqaCpjbEfukDr5As7EnrqRzi5PSho1rOS/q2H0E+HOs=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost

DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=YOUR_DB_NAME
DB_USERNAME=YOUR_USERNAME
DB_PASSWORD=YOUR_PASSWORD

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=null

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=

在使用迁移时运行这些命令总是好的

composer dump-autoload
php artisan cache:clear
php artisan view:clear

【讨论】:

如果你需要我可以帮助你通过teamviewer,你可能犯了一些小错误,但如果你看不到,总是很难分辨出什么问题【参考方案2】:

已解决:

确保在这种情况下您已经运行

php artisan cache:clear php artisan config:cache

我以为我在每个关键步骤都这样做了,但是再次运行这两个命令使我能够进行迁移并使网站正常运行。不过,感谢 lewis4u 的帮助。

【讨论】:

【参考方案3】:

我也遇到过同样的情况, 按顺序尝试以下,

1) install the postgre extensions for php, those are:
   php-(YOUR_VERSION)-pgsql, and php-pgsql.
2) enable pgsql extensions in your php.ini file, basically, 
   uncomment the the extensions. 
3) restart the apache server(or nginx).
4) check that extensions are enable using phpinfo() or any else tool.
5) set a password for (in instance) the postgres user in postgreSQL 
   server, this is a very important step.

登录 psql shell:

sudo su - postgres
\password postgres

输入密码并确认。

现在,设置您的 .env 文件并重试。

【讨论】:

【参考方案4】:

你应该安装 PHP pdo

sudo apt upgrade 
sudo apt install php-pgsql

【讨论】:

以上是关于Laravel:PHP Artisan Migrate 抛出 PDO 异常:找不到驱动程序(Postgres)的主要内容,如果未能解决你的问题,请参考以下文章

php Laravel Artisan迁移实例

php Laravel Artisan Migrate创建领域

无法 php artisan 迁移 - Laravel

laravel 自动删除 php artisan serve 上的 server.php

如何使用 Artisan 命令 (PHP) 在 Laravel 5.2 中创建 RESTful 资源控制器

Laravel php artisan 产生错误