由于数据库损坏存在一些重复标签,我无法合并

如图所示,在我们的论坛中,存在一些完全相同的标签!

创建主题时,您会发现这些标签显示的帖子数量各不相同:

但如果您选择其中一个,两个标签都会被选中。然而,当您点击这些标签时,它们都会跳转到同一个页面,显示相似的帖子和相同的帖子数量。因此,管理员无法将它们合并或删除其中一个。

this 是我们论坛中的一个示例主题,其中包含两组重复的标签。

我遇到过类似的问题,是由于索引损坏导致的。

我不确定这是否会有帮助 Can't restore due to corrupt indexes (with some clues on how to deal with corrupt indexes)

@neil 有什么想法吗?这是同义词的副作用吗?

不太可能,我们见过很多损坏的索引和糟糕的第三方插件导致这个问题。

这个情况与以下主题相同:

tag 名称列上存在唯一索引,因此不应出现重复标签。我猜测如果你执行 reindex table tags,操作将会失败。

@pfaffman 在此处 链接 描述的流程,很可能就是你需要执行的步骤,以删除重复标签并修复索引。

这是我们要用的插件列表,我想它们应该都与标签无关:

我已经手动移除了它们!或者更准确地说,我移除了每对重复标签中的一个;然后,该对中另一个标签的页面变得无法访问(即使是管理员也无法访问)!当我们访问该页面时,会显示“该页面不存在或是私有的”,尽管实际上有多个话题使用了该标签。

例如,标签 یادگیری 本应包含 488 个话题,但该标签页面不存在(链接到 标签页面):

image

附注:抱歉,页面和标签都不是英文的。希望这能提供线索。

听起来你是通过 UI 操作的,但这种方式无法完成。正如 Jay 所做的那样,你需要将所有使用某个标签的主题更新为使用另一个标签,就像他的示例中那样:

TopicTag.where(tag_id: 717).update_all(tag_id: 611)

谢谢,有什么命令可以找到已损坏的标签(包括那些我已经通过 UI 修改过的)以及重复的标签吗?如果有,能否指导我一下?

我在 Can't restore due to corrupt indexes (with some clues on how to deal with corrupt indexes) - #14 by pfaffman 上描述了我是如何做到的(或类似的操作)。这远非一份操作指南,但或许能有所帮助。你需要在 Rails 控制台和 psql 之间来回切换,如果你不熟悉这两者,可能会感到困惑或不知所措。如果上述方法行不通,而你又有一定的预算,我最近刚完成过类似操作。:wink:

我认为索引损坏并非由插件引起。过去几个月里,我遇到过五次类似的 PostgreSQL 索引损坏情况,其中四次都使用了波斯语(Farsi)语言设置。

我也认为这是一个 Contribute > Bug(贡献:Bug),而且情况还在持续!即使我已经删除了之前的重复项,新的重复项又出现了。如果需要,我可以移除非官方插件并检查新重复项的产生情况。

如果这是由波斯语(Farsi)引起的,我怀疑可能是因为不同的键盘使用了看似相同但本质不同的字母。例如,有些设备使用阿拉伯字母,而有些则使用波斯字母。在这些键盘中,我们有 يی,它们在单词中使用时很难区分(但在编码上是不同的)。

@Pfaffman 的情况是针对英语索引,而不是波斯语!

是的,那是我所知道的唯一一个非波斯语的索引。