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_pgsql 和 php_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与开关网站方法