我第一次运行
php artisan migrate
,它工作得很好。
我又添加了 1 个迁移脚本到 alter 我的一张表。
我一运行
php artisan migrate
,我就开始看到这个错误。
我的 database.php
中有此设置'default' => env('DB_CONNECTION', 'pgsql'),
'pgsql' => [
'driver' => 'pgsql',
'host' => env('DB_HOST'),
'database' => env('DB_DATABASE'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
请告诉我我还能提供什么。
这是一个老问题,但我最近遇到了这个问题,似乎从另一个数据库所有者复制我的迁移表后发生了更改。
因此请检查您的数据库和表所有者,并确保表由同一用户拥有。
实际的解决方案是将
'schema' => 'public',
附加到 psql DB_CONNECTION 的末尾。
'pgsql' => [
'driver' => 'pgsql',
'host' => env('DB_HOST'),
'database' => env('DB_DATABASE'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'schema' => 'public', <------- ADD HERE
],
现在,
php artisan migrate
工作得很好。
另一个案例。
如果您有 pgbouncer 并且路由是通过数据库名称配置的 db_master/db_slave,那么在 Laravel 9 和 10 中你会遇到同样的错误。
这是因为条件 u000bendor\laravel ramework\src\Illuminate\Database\Schema\Grammars\PostgresGrammar.php 第 76 和 86 行
表目录=?
构建或部署应用程序时,您需要修补此文件并删除此情况。
这已在 Laravel 11 中修复。