データベースの破損により重複タグがいくつか存在し、マージできません

画像からもお分かりいただける通り、当フォーラムには完全に同じタグがいくつか存在します。

トピック作成時、これらのタグには異なる件数のトピック数表示がなされています。

しかし、いずれかを選択すると、両方が同時に選択されてしまいます。その後、タグをクリックすると、両方とも同じページ(類似トピックとトピック数を含む)に移動します。そのため、管理者はこれらをマージしたり、一方を削除したりすることができません。

this は、当フォーラムの重複タグが2組存在するサンプルトピックです。

私も同様の問題に直面しました。それはインデックスが破損していたことが原因でした。

これが役立つかわかりませんが、こちらをご覧ください Can't restore due to corrupt indexes (with some clues on how to deal with corrupt indexes)

@neil ここに何かアイデアはありますか?これは類義語の副作用でしょうか?

可能性は低いですが、破損したインデックスや問題のあるサードパーティ製プラグインが原因でこの現象が発生したケースを多数確認しています。

このトピックと同じようです:

タグ名カラムには一意のインデックスが設定されているため、重複するタグが存在するはずがありません。おそらく reindex table tags を実行すると失敗するでしょう。

@pfaffman 氏のこのプロセス here が、重複タグを削除してインデックスを修復するために必要な手順だと思われます。

これが現在インストールされているプラグインのリストです。おそらく、これらの中にはタグに関連するものはないでしょう:

すでに手動で削除しました!正確には、重複しているタグのペアから一方を削除しました。すると、もう一方のタグのページがアクセス不能になりました(管理者でもです)。そのページにアクセスすると、「そのページは存在しないか、非公開です」と表示されますが、実際にはそのタグが付いたトピックがいくつか存在します。

例を挙げると、「یادگیری」というタグには本来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 インデックスの破損を 5 回目に遭遇しており、そのうち 4 回はペルシア語(ファールシ語)の設定を使用していました。

私もこれは Contribute > Bug だと思いますし、問題なのはこれが継続していることです!以前の重複を削除しても、また新しい重複が発生します。役に立つのであれば、非公式のプラグインを削除して、新しい重複の発生を確認することができます。

もしペルシャ語が原因であるなら、それは異なるキーボードが使用している、一見似ているが本質的に異なる文字があるためかもしれません。例えば、一部のデバイスはアラビア文字を使用し、他のデバイスはペルシャ語を使用します。これらのキーボードでは يی があり、単語の中で使用されるとそれらを区別することはできません(ただし、エンコーディングは異なります)。

しかし、@Pfaffman のケースは英語のインデックスであり、ペルシャ語ではありませんでした!

はい、それは私が知っている唯一のペルシャ語ではないものです。