Wiederherstellung aufgrund beschädigter Indizes nicht möglich (mit Hinweisen zum Umgang mit beschädigten Indizes)

Auch hier gab es zwei Einträge, bei denen ‘shiny-server’ nur einen traf, während ‘%hiney-server’ beide traf. Ich verstehe nicht, wie mir das hilft, aber ich denke, du meinst, dass mein select erwartet, dass nur ein Ergebnis zurückgegeben wird, das dann aus dem Index gezogen wird, während der andere ignoriert wird. Wenn ich jedoch % verwende, werden die Felder durchsucht.

discourse=> EXPLAIN ANALYZE select * from tags where name='shiny-server'; 
                                                        QUERY PLAN                                                        
--------------------------------------------------------------------------------------------------------------------------
 Index Scan using index_tags_on_name on tags  (cost=0.28..8.29 rows=1 width=36) (actual time=0.038..0.040 rows=1 loops=1)
   Index Cond: ((name)::text = 'shiny-server'::text)
 Planning time: 0.129 ms
 Execution time: 0.070 ms
(4 rows)

Ich bezweifle stark, dass jemand, der das nicht selbst herausfindet, dies nützlich findet, aber … Ich habe eine Reihe von tag_ids mit demselben Namen gefunden und Dinge wie folgendes gemacht:

 TopicTag.where(tag_id: 717).update_all(tag_id: 611)
 Tag.ensure_consistency!
 Tag.find(717) # sicherstellen, dass er in keinem Topic enthalten ist
 Tag.find(717).destroy

und habe dann in psql ein reindex table tags; ausgeführt.

Und es sieht so aus, als müsste ich das nun auch für users ähnlich wie von @bartv beschrieben machen. Bei meinen Benutzern sehe ich jedoch einen Benutzer David und einen anderen Benutzer david sowie [Mm]ark.

Die habe ich so behoben:

marks=User.where("username similar to  '[Mm]+ark'").pluck(:id,:username,:created_at)

Dann den neuen Mark in /admin/users finden und den Benutzernamen dort ändern. Anschließend versuchen, reindex table users; in psql auszuführen (sudo su - discourse und dann psql).