Problème de mise à niveau : doublon de nom d'utilisateur dans DB

J’ai donc essayé de mettre à niveau mon serveur ce matin et j’ai rencontré une erreur :

PG::UniqueViolation: ERROR: duplicate key value violates unique constraint “index_users_on_username”

L’erreur mentionne un utilisateur “MikeC”. J’ai donc fait quelques recherches et on m’a conseillé de restaurer postgres_data, de redémarrer mon serveur, puis d’examiner la base de données à la recherche de doublons. J’ai donc exécuté une requête rapide pour username_lower = ‘mikec’ et j’ai trouvé une seule ligne. Ensuite, j’ai trouvé cette requête ingénieuse :

SELECT username_lower, count(*) from users GROUP by username_lower HAVING count(*) > 1;

Qui n’a retourné aucune ligne. Alors, où se trouve le doublon ? Toute aide serait appréciée. J’utilise actuellement d’anciennes données, mais j’aimerais pouvoir reconstruire correctement l’application.

1 « J'aime »

Voici comment j’ai résolu le problème, mais je suis sûr qu’il existe une meilleure méthode :

Je suis allé dans ma section d’administration et j’ai recherché « MikeC », ce qui a renvoyé 2 utilisateurs. J’ai donc renommé le plus ancien et, au lieu de relancer la reconstruction, je me suis simplement connecté à la base de données et j’ai réindexé :

cd /var/discourse
./launcher enter app
sudo -i postgres psql discourse
discourse# REINDEX SCHEMA CONCURRENTLY public;

Cela indiquerait un autre doublon, et je retournerais alors à l’interface web pour rechercher cet utilisateur et renommer l’utilisateur plus ancien. À laver, à rincer, à répéter jusqu’à ce qu’aucun doublon ne soit trouvé. Ensuite, reconstruisez et succès !

Cependant, j’aimerais savoir :

  1. Pourquoi Discourse autorise-t-il les doublons ? Le nom d’utilisateur peut être insensible à la casse, mais username_lower se normalise en une valeur qui devrait être unique. Cela semble être un bug assez grave.

  2. Quelle est une meilleure méthode pour trouver et corriger ces doublons ?

2 « J'aime »

Je ne pense pas qu’il existe meilleure solution. Les noms d’utilisateur en double ne sont pas autorisés, mais il semble qu’un bug antérieur n’ait pas appliqué la vérification en minuscules. Un autre sujet a été créé récemment à ce propos.

2 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.