Verschieben Sie eine Discourse-Website mit rsync auf einen anderen VPS

Ich habe das erledigt, und Postgres (und Discourse!) scheinen zufrieden zu sein.

Ich habe sie von Hand bereinigt und die URLs mit entsprechenden **-Mustern eindeutig gemacht. Es könnte sich nur um einen harmlosen Cache handeln, bei dem ich die Duplikate hätte löschen können, aber ich wollte kein Risiko eingehen.

In meinem Fall war es nur ein Index, daher war das Neuerstellen aller Indizes wahrscheinlich übertrieben, aber ehrlich gesagt fühlte ich mich besser, als ich wusste, dass ich alles erfasst hatte.

Nach einigen fehlgeschlagenen Versuchen, die jeweils etwa 30 Sekunden dauerten und ein einzelnes Problem meldeten, war dies meine SQL-Magie, um sofort eine vollständige Liste von Problem-Elementen zu erhalten:

discourse=# select topic_id, post_id, url, COUNT(*) from topic_links GROUP BY topic_id, post_id, url HAVING COUNT(*) > 1 order by topic_id, post_id;
 topic_id | post_id |                          url                          | count
----------+---------+-------------------------------------------------------+-------
    19200 |   88461 | http://hg.libsdl.org/SDL/rev/**533131e24aeb           |     2
    19207 |   88521 | http://hg.libsdl.org/SDL/rev/44a2e00e7c66             |     2
    19255 |   88683 | http://lists.libsdl.org/__listinfo.cgi/sdl-libsdl.org |     2
    19255 |   88683 | http://lists.libsdl.org/**listinfo.cgi/sdl-libsdl.org |     2
    19523 |   90003 | http://twitter.com/Ironcode_Gaming                    |     2
(5 rows)

(5 verbleibende Problem-Elemente in dieser Abfrage, nur als Beispiel.)

Dann würde ich jeden Beitrag ansehen, um zu sehen, was da war und was zu beheben ist:

select * from topic_links where topic_id=19255 and post_id=88683

und dann einen davon korrigieren:

update public.topic_links set url='http://lists.libsdl.org/__listinfo.cgi/**sdl-libsdl.org' where id=275100;

Bis ich keine Dinge mehr zu beheben hatte. :slight_smile:

Ich hätte wahrscheinlich etwas Inner-Join-Magie (oder vielleicht etwas Ruby) verwenden können, um das alles in einer Abfrage zu erledigen, aber ich bin kein Experte und es stellte sich heraus, dass es keine Stunden dauerte, es manuell zu tun. Aber es war mühsam, um es klar auszudrücken. :slight_smile:

Dann habe ich REINDEX DATABASE discourse; ohne CONCURRENTLY ausgeführt, nur um es einfach zu halten, ein paar ccnew*-Indizes gelöscht, die ich zuvor übersehen hatte, und ich war bereit.

Die Seite war die ganze Zeit online, keine Ausfallzeit.

Ob das notwendig war oder nicht, ich fühle mich definitiv sicherer mit meinen Daten, und ich steuere nicht auf eine unangekündigte zukünftige Katastrophe zu.

Danke, dass du mich in die richtige Richtung geschubst hast, um das herauszufinden, @pfaffman!

2 „Gefällt mir“