Problema di aggiornamento con nome utente duplicato in DB

Quindi stamattina ho provato ad aggiornare la mia istanza e ho ricevuto un errore:

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

Fa riferimento all’utente “MikeC”. Quindi ho fatto qualche ricerca e mi è stato consigliato di ripristinare postgres_data, riavviare la mia istanza e poi verificare nel database la presenza di duplicati. Ho quindi eseguito una query rapida per username_lower = ‘mikec’ e ho trovato 1 riga. Successivamente ho trovato questa query avanzata:

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

Che non ha restituito nessuna riga. Quindi dove si trova il duplicato? Qualsiasi aiuto è apprezzato. Sto utilizzando i dati vecchi, ma vorrei poter ricostruire correttamente l’applicazione.

1 Mi Piace

Ecco come l’ho risolto, anche se sono certo esista un modo migliore:

Sono andato nella mia sezione di amministrazione e ho cercato ‘MikeC’, che ha restituito 2 utenti. Quindi ho rinominato quello più vecchio e, invece di eseguire di nuovo rebuild, mi sono semplicemente connesso al DB e ho reindicizzato:

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

Questo avrebbe indicato un altro duplicato e sarei tornato alla WebUI per cercare quell’utente e rinominare quello più vecchio. Ripetere l’operazione finché non si trovano più duplicati. Poi eseguire rebuild e successo!

Tuttavia, vorrei sapere:

  1. Perché Discourse permette duplicati? Il nome utente può essere insensibile alle maiuscole/minuscole, ma username_lower normalizza a un valore che dovrebbe essere unico. Sembra un bug piuttosto grave.

  2. Qual è un modo migliore per trovare e risolvere questi duplicati?

2 Mi Piace

Non credo esista un modo migliore. I nomi utente duplicati non sono consentiti, ma sembra che un precedente bug non abbia applicato il controllo in minuscolo. Recentemente c’è stato un altro argomento a riguardo.

2 Mi Piace

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