Laravel 5 与 Postgresql

Posted

技术标签:

【中文标题】Laravel 5 与 Postgresql【英文标题】:Laravel 5 with Postgres SQL 【发布时间】:2015-08-09 09:59:31 【问题描述】:

我正在使用 postgres 作为数据库的 Laravel 5。我已经配置了 postgres 9.4 和 pgAdmin III,它们都可以正常工作。当我尝试运行迁移时,它给了我错误:

[PDO异常] 找不到驱动程序

这是我的数据库.php

'default' => 'pgsql',

'pgsql' => [            'driver'   => 'pgsql',          
                        'host'     => '127.0.0.1',          
                        'database' => 'fms',            
                        'username' => 'postgres',           
                        'password' => 'root',           
                        'charset'  => 'utf8',           
                        'prefix'   => '',           
                        'schema'   => 'public',         ],

虽然最初我是因为在 Windows 7 上配置了 postgres,但我尝试使用普通 php 效果很好

<?php
   $host        = "host=127.0.0.1";
   $port        = "port=5432";
   $dbname      = "dbname=fms";

   $db = pg_connect( "$host $port $dbname user=postgres password=root"  );
   if(!$db)
      echo "Error : Unable to open database\n";
    else 
      echo "Opened database successfully\n";
   
?>

我也在 wamp 中启用了 php_pgsqlphp_pdo_sql。我不确定如何在 laravel 5 上解决这个问题。

【问题讨论】:

在你的php.ini 中你能取消extension=pdo_pgsql.so 的注释吗? 【参考方案1】:

正如你所说,你已经选择了默认数据库作为 Postgres SQL

'default' => 'pgsql',

你必须在你的php配置设置(php.ini)取消注释pdo和postgres共享对象

即,您需要在 php.ini 中取消注释以下行

extension=pdo_pgsql.so
extension=pgsql.so

注意:

在进行此更改后不要忘记停止并启动您的apache(或php-fpm,如果改用它)。

【讨论】:

我跑了sudo apt install php7.4-pgsql php.net/manual/en/pgsql.installation.php#119801 然后service php7.4-fpm restart 但我仍然得到“无法加载动态库'pdo_pgsql'”【参考方案2】:

我遇到了 Laravel-WAMP-PostgreSql 驱动程序未找到异常的相同问题。我什至像您一样成功地建立了与 Postgre 的直接连接,但是使用“php artisan migrate”命令没有运气。

经过长期研究,我发现有多个 php.ini 文件,其中“extension=php_pdo_pgsql.dll”和“extension=php_pgsql.dll”被注释掉了。

解决方案(当然)是取消注释以下文件中的扩展名:

~/wamp/bin/php/php5.5.*/php.ini ~/wamp/bin/php/php5.5.*/phpForApache ~/wamp/bin/php/php5.5.*/php.ini.install ~/wamp/bin/php/php5.5.*/php.ini-development ~/wamp/bin/php/php5.5.*/php.ini-production 和 ~/wamp/bin/apache/apache2.4.9/php.ini

** 您可以省略“php.ini-development”和“php.ini-production”(不需要取消注释这些文件)。

【讨论】:

【参考方案3】:

您必须修改 .env 文件,然后转到 config>database.php 并将默认值更改为 pgsql,并且在所有模型文件中您需要更改 $protected $connection= 'pgsql'。

【讨论】:

【参考方案4】:

就像@jeff 说的,这可能是由于没有在.env 文件中设置DB_CONNECTION=pgsql 造成的。 .env-文件已预配置 mysql,因此您必须编辑此文件。

【讨论】:

【参考方案5】:

您必须在

中进行与数据库相关的更改
    config/database.php .env 文件

和其他设置

php.ini 设置

如果仍然出现错误,请清除缓存和配置

php artisan cache:clear
php artisan config:clear

它现在应该可以工作了!

【讨论】:

我停止了运行 'php artisan:serve' 的命令,然后我运行你的命令并再次运行 'php artisan:serve' 并且成功了!非常感谢。 我一切正常,我 100% 确定因为我尝试使用外部脚本,清除缓存和配置的部分做到了!谢谢【参考方案6】:

运行此命令以轻松取消注释行 extension=pdo_pgsql.so 和 extension=pgsql.so 来自 php.ini

sed -ri -e 's!;extension=pdo_pgsql!extension=pdo_pgsql!' $PHP_INI_DIR/php.ini

sed -ri -e 's!;extension=pgsql!extension=pgsql!' $PHP_INI_DIR/php.ini

如果您还没有安装驱动程序,或者它给出了无法加载动态库 PGSQL 之类的错误,请运行:

apt-get update && apt-get install -y libpq-dev && docker-php-ext-install pdo pgsql pdo_pgsql

这将安装 pgsql 和 pdo_pgsql 驱动程序。

【讨论】:

【参考方案7】:

我正在使用 PHP7.3,这对我有用,我忘记了:

apt-get install php7.3-pgsql

之后一切顺利。只需使用您正在使用的任何版本的 PHP。

【讨论】:

以上是关于Laravel 5 与 Postgresql的主要内容,如果未能解决你的问题,请参考以下文章

监控系统实践第11天:配置Laravel8.5与开关网站方法

Laravel 5.3 用户验证源码探究 路由与注册

Laravel 5.7 API 与 CORS 问题

Lumen 5.4 与 Laravel 可邮寄

Laravel 5.4 OAuth 与 Dingo 内部请求

Laravel 5.0 文件夹结构:公共与资源