Из-за повреждения базы данных появились дублирующиеся теги, которые невозможно объединить

Как видно на изображении, в наших форумах есть теги, которые полностью совпадают!

При создании темы вы увидите разное количество тем в этих тегах:

Однако при выборе одного из них выбираются оба. Но затем, при клике на теги, оба ведут на одну и ту же страницу с похожими темами и одинаковым количеством тем. Поэтому администраторы не могут объединить их или удалить один из дубликатов.

это пример темы на нашем форуме с двумя наборами дублирующихся тегов.

У меня была похожая проблема, вызванная повреждением индекса.

Не знаю, поможет ли это: Can't restore due to corrupt indexes (with some clues on how to deal with corrupt indexes)

@neil есть какие-то идеи по этому поводу? Это побочный эффект синонимов?

Маловероятно. Мы сталкивались с множеством случаев, когда повреждённые индексы и некачественные сторонние плагины вызывали эту проблему.

Звучит как эта тема:

На столбце с именем тега есть уникальный индекс, поэтому дубликаты тегов быть не должны. Я предполагаю, что если вы выполните reindex table tags, команда завершится ошибкой.

Вероятно, вам потребуется процесс, описанный @pfaffman здесь, чтобы удалить дубликаты тегов и исправить индексы.

Вот список наших плагинов. Думаю, ни один из них не связан с тегами:

Я уже удалил их вручную! Или, точнее, я удалил по одному дубликату из каждой пары; после этого страница для второго тега в паре стала недоступной (даже для администраторов)! При переходе на страницу появляется сообщение «эта страница не существует или закрыта», хотя с этим тегом связано несколько тем.

Например, тег یادگیری, который должен содержать 488 тем, но страница тега не существует (ссылка на страницу тега):

image

P.S.: извините, что страницы и теги не на английском. Надеюсь, это даст подсказку.

Похоже, вы сделали это через интерфейс, но таким способом это невозможно. Как и в случае с Джей, вам нужно обновить все темы, использующие один из тегов, чтобы они использовали другой, как в его примере:

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

Спасибо. Есть ли какая-то команда для поиска повреждённых тегов (тех, которые я уже изменил через интерфейс), а также дубликатов тегов? Если да, не могли бы вы подсказать, как это сделать?

Я описал, как я это сделал (или что-то подобное), по адресу Can't restore due to corrupt indexes (with some clues on how to deal with corrupt indexes) - #14 by pfaffman. Это далеко не пошаговое руководство, но может помочь. Вам придётся переключаться между консолью Rails и psql, что, если вы не знакомы с обоими инструментами, может сбить с толку или напугать. Если это не поможет и у вас есть бюджет, я недавно делал это. :wink:

Я не думаю, что повреждение индекса вызвано плагином.
Я сталкивался с таким повреждением индекса в PSQL пять раз за последние несколько месяцев, и в четырёх из этих случаев использовались настройки языка фарси.

Я тоже считаю, что это баг (Contribute > Bug), и самое плохое в том, что проблема продолжается! Независимо от того, что я удаляю предыдущие дубликаты, новые появляются снова. Если это поможет, я могу отключить неофициальные плагины и проверить, появятся ли новые дубликаты.

Если бы дело было в персидском языке, я бы предположил, что это может быть связано с тем, что разные клавиатуры используют похожие, но по сути разные алфавиты. Например, некоторые устройства используют арабский алфавит, а некоторые — персидский. На таких клавиатурах есть символы ي и ی, которые при использовании в слове невозможно отличить друг от друга (хотя в кодировке они различаются).

Но случай @Pfaffman касался английских индексов, а не персидских!

Да, это единственный не-фарси, о котором я знаю.