Échec de la restauration de la sauvegarde

Je rencontre le problème suivant. J’exploite un forum Discourse depuis plus de 10 ans et, n’ayant pas pu installer de mises à jour depuis un certain temps, je souhaite configurer un nouveau serveur :

Serveur ancien : 3.4.0.beta4-dev

Nouveau serveur : Dernière version

La sauvegarde fait déjà 673,2 Mo au format .gz, hors fichiers uploadés.

Malheureusement, la restauration échoue systématiquement. Le fichier de journal contient cette erreur :

[2026-06-16 07:54:52] ERROR:  could not create unique index “index_incoming_referers_on_path_and_incoming_domain_id”
[2026-06-16 07:54:52] DETAIL:  Key (path, incoming_domain_id)=(//, 5) is duplicated.
[2026-06-16 07:54:52] EXCEPTION: psql failed: DETAIL:  Key (path, incoming_domain_id)=(//, 5) is duplicated.

[2026-06-16 07:54:52] /var/www/discourse/lib/backup_restore/database_restorer.rb:93:in 'BackupRestore::DatabaseRestorer#restore_dump'
/var/www/discourse/lib/backup_restore/database_restorer.rb:26:in ‘BackupRestore::DatabaseRestorer#restore’
/var/www/discourse/lib/backup_restore/restorer.rb:61:in 'BackupRestore::Restorer#run'
/var/www/discourse/script/spawn_backup_restore.rb:20:in ‘Object#restore’
/var/www/discourse/script/spawn_backup_restore.rb:33:in ‘block in ’
/var/www/discourse/script/spawn_backup_restore.rb:4:in 'Kernel#fork'
/var/www/discourse/script/spawn_backup_restore.rb:4:in ‘’
[2026-06-16 07:54:52] Trying to rollback...

Que puis-je faire pour résoudre ce problème sans perdre les 10 dernières années de données ?

Merci d’avance pour toute aide !

Salut et bienvenue, après 9 ans !

C’est vraiment cool de voir un forum aussi ancien.

Je pense que c’est le même problème d’index que celui dont on parle ici : Can't restore due to corrupt indexes (with some clues on how to deal with corrupt indexes)

C’est quelque chose comme ça :

La table incoming_referers suit les chemins d’URL qui ont dirigé les visiteurs vers votre forum. Elle possède un index unique, ce qui signifie qu’aucune deux lignes ne peuvent avoir la même combinaison de chemin + domaine.

Votre base de données contient deux lignes avec path='//' et incoming_domain_id=5. Lorsqu’elle tente de reconstruire cet index unique lors de la restauration, elle trouve la duplication et annule toute la transaction de restauration.

Vous devrez donc trouver et nettoyer cette duplication dans incoming_referers, puis créer une nouvelle sauvegarde à restaurer sur le nouveau serveur.

J’ai trouvé ce sujet avec des instructions qui pourraient vous aider

Merci beaucoup pour votre réponse rapide ; je vais essayer ça !

(message supprimé par l’auteur)

Désolé de vous déranger, mais je crois que je fais quelque chose de travers — après avoir exécuté la commande « discourse=# select * from incoming_referers where path LIKE ‘%/search/’ ORDER BY incoming_domain_id; », j’obtiens une erreur de syntaxe.

Avez-vous tapé « discourse=# » ? Si oui, réessayez sans cela.

J’obtiens ensuite le message d’erreur « bash : erreur de syntaxe près du jeton inattendu `from’ »

Pour référence, je suis actuellement à : root@community-app:/var/www/discourse#

Ah, vous n’êtes pas encore dans la base de données.

Exécutez d’abord psql -U discourse discourse (je crois)

Et ensuite, l’invite de commande devrait passer à discourse=#

D’accord, j’ai maintenant également installé « apt install postgresql-client-common ». Cependant, je reçois toujours l’erreur « Error: You must install at least one postgresql-client- package. ».

D’accord, je ne sais pas.

Essayez peut-être directement via la console Rails : rails c

avec

ActiveRecord::Base.connection.execute(<<~SQL)
  SELECT id, path, incoming_domain_id 
  FROM incoming_referers 
  WHERE path = '//' 
  AND incoming_domain_id = 5
SQL

Cela pourrait vous donner le même résultat sans passer par la base de données.

Cela fonctionne ?

Je suis vraiment, vraiment désolé d’avoir agi aussi bêtement.

J’ai maintenant installé Rails, et cela semble avoir fonctionné. Je l’ai également exécuté avec « rails c ». Cela semble également fonctionner, mais lorsque j’entre la commande, voici ce qui s’affiche :

« root@community:/var/discourse# ActiveRecord::Base.connection.execute(<<~SQL)
-bash: syntax error near unexpected token ‘`<<’
root@community:/var/discourse# SELECT id, path, incoming_domain_id
SELECT: command not found
root@community:/var/discourse# FROM incoming_referers
FROM: command not found
root@community:/var/discourse# WHERE path = ‘//’
WHERE: command not found
root@community:/var/discourse# AND incoming_domain_id = 5
AND: command not found
root@community:/var/discourse# SQL »

Ne t’inquiète pas, peut-être que mes instructions ne sont pas très claires :slight_smile:

Je suis un peu perplexe quand tu dis que tu viens d’installer Rails et que tu n’arrives pas à accéder à ta base de données. Peut-être que tout est différent parce qu’il s’agit d’une version plus ancienne, mais là, je pense que je dépasse mes compétences.

Enfin, une fois que tu es dans Rails, l’invite de commande devrait être différente, donc d’après ton affichage, il semble que tu ne sois pas encore dans la console Rails.

Je ne pense même pas que tu sois dans le conteneur. As-tu exécuté ./launcher enter app ?