issue: duplicate key value violates unique constraint “config_pkey1”

这个报错通常不是 Open WebUI 本身的问题,而是 PostgreSQL 中 config 表的主键索引与表内容不同步所致。优先排查该表是否存在重复记录,并对数据库执行 REINDEX 操作。

快速结论:这个报错通常不是 Open WebUI 本身的问题,而是 PostgreSQL 中 config 表的主键索引与表内容不同步所致。优先排查该表是否存在重复记录,并对数据库执行 REINDEX 操作。

适用环境:Docker 安装的 Open WebUI v0.11.3,后端使用 PostgreSQL(该案例中为 ramsrib/pgvector:17 镜像),操作系统 Debian 13,Ollama v0.33.3。

最快修复方案:在 PostgreSQL 中先清理重复记录,再重建索引。具体 SQL 见下方解决步骤。Issue 作者反馈按该方案操作后问题完美解决。

注意事项:此方案会删除重复配置记录中较旧的行;执行前建议备份数据库。Issue 中确认本轮未涉及 collation 版本变更,但查询该信息仍属必要排查项。

问题场景

用户在 Open WebUI v0.11.3(Docker 部署)的管理后台“设置 > 文档”中尝试修改 CHUNK_SIZE 等 RAG 参数。点击保存后界面提示“设置已保存”,但实际设置未生效;Docker 日志中持续输出数据库唯一约束冲突错误。用户同时也确认通过 Docker 环境变量方式写入配置同样失败。

报错原文

issue: duplicate key value violates unique constraint "config_pkey1"
DETAIL:  Key (key)=(web.search.yandex_web_search_url) already exists.
[SQL: UPDATE config SET updated_at=%(updated_at)s::BIGINT WHERE config.key = %(config_key)s::VARCHAR]
[parameters: [{'updated_at': 1788973486, 'config_key': 'rag.tika_server_url'}, {'updated_at': 1788973486, 'config_key': 'rag.tika_server_version'}, ... displaying 10 of 78 total bound parameter sets ...]]

原因分析

维护者确认这并非 Open WebUI 的 bug,而是 PostgreSQL config 表的主键索引与表内容不同步。本质上,该 UPDATE 语句只会修改 updated_at 字段,key 值不变。PostgreSQL 在这种纯更新操作中抛出唯一约束冲突,只可能说明表中已存在两条拥有相同 key 的活跃行。健康的唯一索引不应允许这种情况发生,因此可以判定索引本身已损坏。

索引损坏通常在 PostgreSQL 端发生 collation 变更后出现(例如更换镜像、基础操作系统或大版本升级时未执行 REINDEX)。Issue 中 config_pkey1 是 0.11 配置迁移后的正常约束名,并非异常线索。该案例中 collation 版本排查后未发现需变更的情况。

环境排查

  • 确认 PostgreSQL 后端版本、镜像来源以及是否更换过基础操作系统或大版本。
  • 检查 PostgreSQL 日志中是否存在 “collation version mismatch” 警告。
  • 确认 config 表中是否存在重复 key(需要关闭索引扫描后查询)。
  • 排除其他类似症状但不同根因的已知问题(如 #18942、#19668、#23995 等均属设置未持久化,但与本次数据库索引损坏无直接关联)。

解决步骤

  1. 备份当前数据库(防止清理误删数据)。
  2. 连接至 Open WebUI 所使用的 PostgreSQL 数据库,执行以下 SQL,在禁用索引扫描的前提下查找重复键值记录:
    SET enable_indexscan = off; SET enable_indexonlyscan = off; SET enable_bitmapscan = off;
    SELECT ctid, key, updated_at FROM config
    WHERE key IN (SELECT key FROM config GROUP BY key HAVING count(*) > 1)
    ORDER BY key, updated_at;
  3. 若查询返回结果,在同一会话中保留每组重复 key 中最新一条(ctid 较大),删除其余旧行,随后重建表索引并检查其他受影响表:
    DELETE FROM config a USING config b WHERE a.key = b.key AND a.ctid < b.ctid;
    REINDEX TABLE config;
    REINDEX DATABASE <your_db>;
  4. 查看 PostgreSQL 日志确认是否存在 “collation version mismatch”。如果存在,在数据库重建索引后执行:
    ALTER DATABASE <your_db> REFRESH COLLATION VERSION;
  5. 重新在 Open WebUI 管理后台尝试修改 CHUNK_SIZE 等参数并保存。

验证方法

保存设置后查看 Docker 日志确认不再出现 duplicate key value violates unique constraint "config_pkey1" 错误;刷新页面确认 CHUNK_SIZE 等配置内容已实际更新且重启后仍然保留。

参考来源

open-webui/open-webui #29851

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 22487

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注