Sposta un sito Discourse su un altro VPS con rsync

Ho fatto questo e Postgres (e Discourse!) sembrano essere felici.

Li ho puliti manualmente, rendendo gli URL univoci con pattern ** appropriati. Potrebbe essere solo una cache innocua dove avrei potuto eliminare i duplicati, ma non volevo rischiare.

Nel mio caso, era solo un indice, quindi ricostruire tutti gli indici è stato probabilmente eccessivo, ma onestamente mi sono sentito meglio sapendo di aver catturato tutto.

Dopo alcuni tentativi falliti di ricostruzione, che richiedono circa 30 secondi ogni volta e segnalano un singolo problema, questa è stata la mia magia SQL per ottenere un elenco completo degli elementi problematici all’istante:

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 elementi problematici rimanenti in questa query, a scopo illustrativo.)

Poi guardavo ogni post per vedere cosa c’era e cosa sistemare:

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

e poi sistemavo uno di essi:

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

Fino a quando non ho finito le cose da sistemare. :slight_smile:

Probabilmente avrei potuto usare qualche magia di inner-join (o forse un po’ di Ruby) per ottenere tutto in una query, ma non sono un esperto e alla fine non è stato un lavoro di ore farlo manualmente. Ma è stato noioso, sia chiaro. :slight_smile:

Poi ho eseguito REINDEX DATABASE discourse; senza CONCURRENTLY solo per mantenerlo semplice, ho eliminato alcuni indici ccnew* che avevo trascurato in precedenza, e tutto era a posto.

Il sito è rimasto attivo per tutto il tempo, senza interruzioni.

Che fosse necessario o meno, sicuramente sento che i miei dati sono un po’ più sicuri ora, e non sto correndo verso qualche disastro non annunciato.

Grazie per avermi spinto nella giusta direzione per risolvere questo problema, @pfaffman!

2 Mi Piace