这是 升级至 gitlab 15.10 出现 500 错误 问题的后续,从 gitlab 15.10 降级至 15.9.3 之后,有些项目中提交 issue 出现了 500 错误,对应的错误日志如下
ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_issues_on_project_id_and_iid"
DETAIL: Key (project_id, iid)=(15, 758) already exists.
):
请问如何解决这个问题?
在 gitlab 官网的 issue 评论中找到了简单的解决方法:以出问题项目的 project_id
与自增 issue id(iid+1)
,用 curl 命令 POST 请求 gitlab rest api 创建一个 issue,之后就可以在页面中正常创建 issue。
比如对于错误 Key (project_id, iid)=(15, 758) already exists
,project_id 是 15,自增 iid 是 159,通过下面的 curl 命令发请求后问题就解决了。
curl --request POST --header "PRIVATE-TOKEN: ******" "https://gitlab-hostanme/api/v4/projects/15/issues?title=test&iid=759"
根据错误日志,可以看到问题是由于在提交 issue 时,GitLab 尝试在数据库中创建一个已经存在的记录导致的。这种情况通常是由于 GitLab 在升级或降级时,未正确处理数据库中现有数据的原因。
要解决这个问题,可以尝试以下几种方法:
清理数据表
尝试清理数据库中的数据表,特别是与问题(issues)相关的表。可以尝试在 GitLab 控制台中使用以下命令:
gitlab-rake db:drop_all_partitions
gitlab-rake db:migrate
gitlab-rake db:seed_fu
这将删除所有分区并重新运行数据库迁移和填充数据。
手动重建索引
尝试手动重建与问题(issues)相关的索引,可以在 GitLab 控制台中使用以下命令:
gitlab-rake gitlab:elastic:index_reset
gitlab-rake gitlab:elastic:index_start
这将重置并重新开始 Elasticsearch 索引。请注意,这需要一些时间来完成。
重新安装 GitLab
如果以上方法都无法解决问题,您可能需要重新安装 GitLab,并从头开始设置。
感谢回答!在 gitlab 官网上找到了更简单的解决方法