您好,
我正在尝试将备份恢复到新的 Discourse 实例,因为我正在进行服务器迁移。不幸的是,我遇到了以下错误:
我已经阅读了以下内容:
Restore fails - could not create unique index - #2 by simon 并删除了索引。
现在,当我执行:
[2] pry(main)> IncomingReferer.where(path: "/m/search")
=> []
我没有得到任何结果。
现在是否可以进行备份并在另一台服务器上恢复?
谢谢,
Sam
不幸的是,这并没有解决问题,我在恢复时仍然收到此消息:
[2021-07-03 16:53:41] ERROR: 无法创建唯一索引 "index_incoming_referers_on_path_and_incoming_domain_id"
[2021-07-03 16:53:41] DETAIL: 键 (path, incoming_domain_id)=(/search, 4502) 重复。
[2021-07-03 16:53:41] EXCEPTION: psql 失败:DETAIL: 键 (path, incoming_domain_id)=(/search, 4502) 重复。
目前还不清楚如何修复此问题。
我发现了更多重复项,使用了 IncomingReferer.where("path LIKE '%/m/search%'"),因此也销毁了这些索引。我的实例现在似乎完全无法运行——即使在旧服务器上也是如此,因此我将尝试重新构建它。
Sam
仍有问题。我遇到了以下错误:
[2021-07-03 17:28:53] ERROR: 无法创建唯一索引 "index_incoming_referers_on_path_and_incoming_domain_id"
[2021-07-03 17:28:53] DETAIL: 键 (path, incoming_domain_id)=(/osmc/osmc, 2939) 重复。
[2021-07-03 17:28:53] EXCEPTION: psql 执行失败:DETAIL: 键 (path, incoming_domain_id)=(/osmc/osmc, 2939) 重复。
在尝试恢复新备份时出现此问题。
但我的控制台显示,我已经清理了运行中服务器上的实例(该服务器重建后现已恢复运行):
[1] pry(main)> IncomingReferer.where(path: "/m/search")
=> []
[2] pry(main)> IncomingReferer.where("path LIKE '%/m/search%'")
=> []
请问有谁能建议需要做什么来修复数据库,以便我能在另一台机器上恢复它?
谢谢
Sam
pfaffman
(Jay Pfaffman)
4
谢谢。
我已经读过这篇文章,但不知道需要运行哪些命令或查询来解决我的问题。
Sam
pfaffman
(Jay Pfaffman)
6
基本上,你需要尝试重建索引,并持续删除内容,直到能够重新索引为止。看起来你已经在做正确的事情,只需对所有重复条目持续进行此操作即可。
如果你有预算,可以在 Marketplace 中发帖。
你好 Jay,
在英国,将我们的数据库暴露给第三方以修复这些问题是违法的;即使合法,出于保护用户隐私的考虑,我也无意这样做。
作为一名开源项目的维护者,将此事提交至 Marketplace 的做法令人失望,尤其是这似乎默认了问题是由 Discourse 在其 Docker 容器中捆绑的 Postgres 更新所引入的。我们使用 Discourse 的 Docker 容器,是因为我们理解其中紧密耦合的依赖关系,并希望将版本和依赖管理交由 Discourse 团队的专业能力来处理。
目前看来,这已被普遍认为是 Postgres 12 的一个回归问题,并且存在一些可能的缓解措施。然而,相关报告早在一年多前就已出现,我确信未来会有更多用户在尝试恢复备份时受到影响。
我宁愿资助一些开发时间,以便在 Discourse 上游修复此问题,让其他人也能从中受益。在此期间,我们的论坛无法正常运行,我将需要向具备 Postgres DBA 知识的专业人士寻求帮助。
祝好,
Sam
1 个赞
pfaffman
(Jay Pfaffman)
8
嘿,Sam。
很抱歉,我没能提供足够的指导让你自行解决问题,但你的语气听起来像是这样。我以为得知还有其他方法能让你的论坛重新上线,你会感到宽慰,而不是失望。
祝好!
1 个赞
你好,Jay:
完全不是这样。你不必对我有任何亏欠——但我原本以为,鉴于你的发帖历史,你应该能提供一个快速的解决方案。而且,由于你的帖子看起来像是 definitive 的答案,且该话题已关闭,我本以为自己漏掉了什么显而易见的内容。
我会随时告知你进展。
祝好,
Sam
1 个赞
不幸的是,这仍然是我们面临的问题,而且我们无法迁移服务器,这令人相当担忧。
我们很乐意付费请人解决此问题,但在此问题出现后,尽管论坛中多次承认该问题却仍未提供明确的解决方案,我们正认真考虑迁移到其他论坛软件,例如 Flarum。它可能不像 Discourse 那样功能丰富,但它基于 LAMP 架构,而我(作为非 Web 开发人员)也能轻松上手。
当我们使用 Discourse 的 Docker 容器时,我们期望能获得支持。如果我们自行部署所有组件并使用自己的 Postgres 版本,我或许能理解目前的回应。但到目前为止,我们仅使用了你们推荐并提供的运行环境,而现在在迁移到新服务器方面我们陷入了困境(我们有一个迫在眉睫的截止日期)。
目前,我最好的办法是进行 Docker 卷备份和恢复,因为 Discourse 的备份功能无法使用。这也令人担忧:我们每天都有备份生成,却无法将其恢复到新的 Discourse 环境中。我想知道近期会有多少人遇到类似的问题。
Sam
Postgres 确实存在一些会导致索引损坏的 bug。我们认为其中大部分已在 Postgres 13.x 中得到解决。