Je tente de restaurer une sauvegarde sur une nouvelle instance Discourse dans le cadre d’une migration de serveur. Malheureusement, je rencontre cette erreur :
Malheureusement, cela n’a pas aidé, et je reçois toujours ce message lors de la restauration :
[2021-07-03 16:53:41] ERROR: could not create unique index "index_incoming_referers_on_path_and_incoming_domain_id"
[2021-07-03 16:53:41] DETAIL: Key (path, incoming_domain_id)=(/search, 4502) is duplicated.
[2021-07-03 16:53:41] EXCEPTION: psql failed: DETAIL: Key (path, incoming_domain_id)=(/search, 4502) is duplicated.
Je ne vois pas clairement comment résoudre ce problème.
J’ai trouvé d’autres doublons avec IncomingReferer.where("path LIKE '%/m/search%'"), alors j’ai supprimé ces entrées également. Mon instance semble maintenant complètement hors service — même sur l’ancien serveur — je vais donc essayer de la reconstruire.
[2021-07-03 17:28:53] ERROR: could not create unique index "index_incoming_referers_on_path_and_incoming_domain_id"
[2021-07-03 17:28:53] DETAIL: Key (path, incoming_domain_id)=(/osmc/osmc, 2939) is duplicated.
[2021-07-03 17:28:53] EXCEPTION: psql failed: DETAIL: Key (path, incoming_domain_id)=(/osmc/osmc, 2939) is duplicated.
lorsque j’essaie de restaurer une nouvelle sauvegarde.
Or, ma console indique que j’ai nettoyé les instances sur le serveur en cours d’exécution (qui est de nouveau opérationnel après la reconstruction) :
En gros, vous devez essayer de reconstruire l’index et continuer à supprimer des éléments jusqu’à ce que vous puissiez le réindexer. Il semble que vous soyez sur la bonne voie ; il vous suffit de continuer à le faire pour toutes les entrées en double.
Si vous avez un budget, vous pouvez poster dans Marketplace.
Il n’est pas légal au Royaume-Uni d’exposer notre base de données à des tiers pour résoudre ces problèmes, et même si cela l’était, je n’ai aucun intérêt à le faire, dans le but de protéger la vie privée des utilisateurs.
En tant que mainteneur de projet open source moi-même, l’idée de porter cette question sur le Marketplace est décevante, d’autant plus qu’il semble y avoir une reconnaissance tacite du fait que ces problèmes ont été introduits par une mise à jour de Postgres incluse dans le conteneur Docker de Discourse. Nous utilisons Discourse dans un conteneur Docker car nous comprenons les dépendances étroitement couplées et souhaitons déléguer la gestion des versions et des dépendances à l’expertise de l’équipe Discourse.
Il semble admis qu’il s’agit d’une régression de Postgres 12 et qu’il existe certaines atténuations potentielles. Cependant, les premiers signalements remontent à plus d’un an, et je suis certain qu’il y aura davantage d’utilisateurs affectés à l’avenir s’ils tentent de restaurer une sauvegarde.
Je préférerais sponsoriser du temps de développement pour corriger ce problème en amont dans Discourse, afin que d’autres puissent également en bénéficier. En attendant, notre forum n’est pas fonctionnel et je devrai consulter quelqu’un disposant de compétences d’administrateur de base de données Postgres.
Désolé de ne pas avoir pu te fournir les instructions nécessaires pour résoudre ton problème toi-même, mais c’est ainsi que tu as présenté les choses. J’ai pensé que ce serait plutôt un soulagement qu’une déception d’apprendre qu’il existe d’autres moyens de remettre ton forum en ligne.
Pas du tout. Tu ne me dois rien — mais j’espérais que tu avais une solution rapide, vu ton historique de publications, et j’ai supposé que j’avais manqué quelque chose d’évident, étant donné que tes réponses semblaient définitives et que le sujet était clos.
Malheureusement, cela reste un problème pour nous, et nous ne pouvons pas migrer de serveurs, ce qui est plutôt préoccupant.
Nous serions prêts à payer quelqu’un pour résoudre ce problème, mais après cet incident et la reconnaissance répétée de celui-ci sur le forum sans solution claire, nous envisageons sérieusement de migrer vers un autre logiciel de forum comme Flarum. Il n’est peut-être pas aussi riche en fonctionnalités que Discourse, mais il repose sur LAMP et je peux, en tant que non-développeur web, comprendre son fonctionnement.
Lorsque nous avons utilisé le conteneur Docker de Discourse, nous nous attendions à bénéficier d’un support. Si nous avions tout déployé séparément et utilisé notre propre version de Postgres, je pourrais comprendre la réponse. Mais jusqu’à présent, nous n’avons fait qu’utiliser l’environnement que vous avez recommandé et fourni vous-mêmes, et maintenant nous sommes vraiment coincés en termes de migration vers un nouveau serveur (nous avons une échéance imminente).
À ce stade, ma meilleure option est une sauvegarde et une restauration de volume Docker, car les sauvegardes de Discourse ne sont pas utilisables. C’est également inquiétant : nous avons des sauvegardes réalisées quotidiennement, mais nous ne pouvons pas les restaurer dans un nouvel environnement Discourse. Je me demande combien d’autres personnes rencontreront un tel problème dans un avenir proche.
Il y avait en effet pas mal de bogues dans Postgres qui pouvaient causer la corruption des index. Nous pensons que la plupart d’entre eux sont résolus dans Postgres 13.x.