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

3

操作系统: Ubuntu 16.10

服务器: Nginx

数据库: PostgreSQL 9.5.4

Laravel 5.4

我试图执行数据库迁移,但php artisan migrate报错如下:

[Illuminate\Database\QueryException] could not find driver: (SQL select * from information_schema.tables where tables_schema = username and table_name = migrations)

还有第二条错误信息:

[PDOException]

could not find driver

我已经进行了以下步骤:

  1. 确认我安装了php-pgsql的最新版本
  2. 在/etc/php/7.0/fpm/php.ini中取消了与php_pdo_pgsql.dll相关的注释行
  3. 多次重启了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)之外。 - Mugoma J. Okomba
5个回答

6

您需要安装PHP PDO扩展

sudo apt upgrade 
sudo apt install php-pgsql

2
我经历过相同的情况,并按照以下顺序进行操作:
  1. 安装php的postgre扩展,包括:php-(YOUR_VERSION)-pgsqlphp-pgsql
  2. 在php.ini文件中启用pgsql扩展,基本上是取消注释。
  3. 重启apache服务器(或nginx)。
  4. 使用phpinfo()或类似工具检查扩展是否已启用。
  5. 为PostgreSQL服务器中的postgres用户设置密码,这是非常重要的一步。

登录到psql shell:

sudo su - postgres
\password postgres

输入一个密码并确认。
现在,设置您的.env文件,然后再试一次。

0

我的问题通过安装 php-pgsql 得以解决。

我正在使用 PHP v8.1,所以我运行了以下命令:

sudo apt-get install php8.1-pgsql

希望这能有所帮助。


0

你需要定义你的 .env 文件

在你的 .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

1
如果你想的话,我可以通过TeamViewer帮助你,你可能犯了一些小错误,但如果你看不到,很难说出问题出在哪里。 - lewis4u

-2

已解决:

在这种情况下,请确保您已运行以下命令:

php artisan cache:clear php artisan config:cache

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接