J’essaie de migrer mon serveur vers un nouvel hôte, j’ai donc téléchargé un fichier de sauvegarde et je l’ai téléversé sur le nouvel hôte. J’ai installé une nouvelle copie de Discourse et j’ai suivi les instructions pour le faire depuis la ligne de commande :
Malheureusement, la commande discourse restore databasename échoue avec :
ALTER TABLE
ALTER TABLE
ALTER TABLE
ERROR: could not create unique index "posts_search_pkey"
DETAIL: Key (post_id)=(36946) is duplicated.
EXCEPTION: psql failed: DETAIL: Key (post_id)=(36946) is duplicated.
/var/www/discourse/lib/backup_restore/database_restorer.rb:92:in `restore_dump'
/var/www/discourse/lib/backup_restore/database_restorer.rb:26:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:51:in `run'
script/discourse:149:in `restore'
Il semble y avoir un problème avec le fichier de base de données ? Quelqu’un peut-il m’indiquer comment résoudre cette erreur ? J’ai toujours accès au serveur d’origine, qui semble fonctionner correctement.
Existe-t-il une commande SQL ou autre chose que je peux exécuter pour analyser (et corriger ?) la base de données avant de télécharger une sauvegarde ?
Il semble que vous ayez un index corrompu. Quelle version de postgres utilisez-vous ?
Il y a quelques sujets à ce sujet. Vous pouvez essayer de réindexer cette table sur l’instance en cours d’exécution, puis supprimer ou corriger les identifiants en double.
./launcher enter app
su - postges
psql discourse
select id from post_search_data were post_id>86918 and post_id<86921;
--- quand vous obtenez l'id ----
delete from post_search_data where id=ID_FROM_LAST_QUERY
Il pourrait y avoir plus.
Peut-être que quelqu’un d’autre peut fournir plus d’aide, mais c’est à peu près tout ce que je pense pouvoir faire sans être connecté à votre serveur. Si vous avez besoin de plus d’aide, vous pouvez publier sur Marketplace ou me contacter directement.
Ou peut-être qu’il est sûr de simplement l’effacer et de le faire régénérer, mais je ne suis pas tout à fait sûr de cela.
discourse=# reindex index concurrently "posts_search_pkey";
ERROR: could not create unique index "posts_search_pkey_ccnew2"
DETAIL: Key (post_id)=(116038) is duplicated.
discourse=# delete from post_search_data
where post_id = 116038;
DELETE 2
discourse=# delete from post_search_data
where post_id = 116038;
DELETE 0
discourse=# reindex index concurrently "posts_search_pkey";
ERROR: could not create unique index "posts_search_pkey_ccnew3"
DETAIL: Key (post_id)=(9336) is duplicated.
discourse=# delete from post_search_data
where post_id = 9336;
DELETE 1
.
.
.
.
discourse=# reindex index concurrently "posts_search_pkey";
REINDEX
Une fois que tout semblait correct, j’ai effectué une sauvegarde complète et l’ai restaurée sur un nouveau serveur sans problème.
J’apprécie le temps de chacun. J’adore discourse !
Leçon apprise : vérifiez vos sauvegardes de temps en temps pour vous assurer qu’elles sont bonnes Je conserve des sauvegardes quotidiennes, et aussi des « instantanés » mensuels. La sauvegarde la plus ancienne que j’avais sans base de données corrompue datait de 4 mois