执行php artisan migrate:fresh时Nova字段附件表迁移失败(ORA-00955)
解决Laravel迁移报错ORA-00955:序列名称已被占用
问题说明
执行php artisan migrate:fresh命令时,2022_12_19_000000_create_field_attachments_table迁移失败,报错ORA-00955,原因是数据库中已存在序列FMISC_ADMIN_TEST.nova_pending_field_attachments,迁移尝试重复创建该序列导致冲突。
解决方案
方案1:手动删除已存在的序列
登录Oracle数据库,执行以下SQL语句删除重复的序列:
DROP SEQUENCE FMISC_ADMIN_TEST.nova_pending_field_attachments;
注:执行此操作需要拥有该序列的删除权限
方案2:修改迁移文件,添加存在性检查
打开对应的迁移文件database/migrations/2022_12_19_000000_create_field_attachments_table.php,在创建序列的代码前增加判断逻辑,避免重复创建:
// 先检查序列是否存在 $sequenceExists = DB::selectOne("SELECT COUNT(*) AS count FROM user_sequences WHERE sequence_name = 'NOVA_PENDING_FIELD_ATTACHMENTS'"); if ($sequenceExists->count == 0) { DB::statement('create sequence FMISC_ADMIN_TEST.nova_pending_field_attachments minvalue 1 start with 1 increment by 1'); }
Oracle中序列名称默认大写,所以查询时要使用大写名称
方案3:强制清理后重新迁移
如果数据库中存在其他残留的迁移相关对象,可先清理数据库(注意提前备份数据),再重新执行迁移:
php artisan migrate:fresh --force
内容的提问来源于stack exchange,提问作者Shubham Dabral
相关产品推荐
相关产品推荐

