Ripristino del backup non riuscito

Ho il seguente problema. Gestisco un forum Discourse da oltre 10 anni e, dato che non sono riuscito a installare aggiornamenti da qualche tempo, volevo configurare un nuovo server:

Il server vecchio esegue: 3.4.0.beta4-dev

Il nuovo server: Ultima versione

Il backup ha già una dimensione di 673,2 MB come file .gz, escludendo gli allegati.

Purtroppo, il ripristino continua a interrompersi. Il file di log contiene questo errore:

[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...

Cosa posso fare per risolvere questo problema senza perdere gli ultimi 10 anni di dati?

Grazie in anticipo per qualsiasi aiuto!

Ciao e ben tornato dopo 9 anni!

È davvero interessante vedere un forum così longevo.

Penso che si tratti dello stesso problema di indicizzazione discusso qui: Can't restore due to corrupt indexes (with some clues on how to deal with corrupt indexes)

La situazione è più o meno questa:

La tabella incoming_referers tiene traccia dei percorsi URL che hanno inviato i visitatori al tuo forum. Possiede un indice univoco, il che significa che non possono esistere due righe con la stessa combinazione percorso + dominio.

Il tuo database contiene due righe con path='//' e incoming_domain_id=5. Quando tenta di ricostruire questo indice univoco durante il ripristino, rileva la duplicazione e interrompe l’intera transazione di ripristino.

Dovrai quindi trovare e rimuovere quella duplicazione in incoming_referers e creare un nuovo backup da ripristinare sul nuovo server.

Ho trovato questo argomento con le istruzioni che potrebbero esserti utili.

Grazie mille per la risposta rapida; proverò!

(post eliminato dall’autore)

Scusa se ti disturbo, ma sembra che io stia facendo qualcosa di sbagliato: dopo aver eseguito il comando “discourse=# select * from incoming_referers where path LIKE ‘%/search/’ ORDER BY incoming_domain_id;”, ricevo un errore di sintassi.

Hai digitato “discourse=#”? Se sì, riprova senza quel parametro.

Poi ricevo il messaggio di errore “bash: errore di sintassi vicino al token inaspettato `from’”

Per riferimento, mi trovo attualmente in: root@community-app:/var/www/discourse#

Ah, non sei ancora nel database.

Prima esegui psql -U discourse discourse (penso)

E poi il prompt dovrebbe cambiare in discourse=#

Ok, ora ho installato anche “apt install postgresql-client-common”. Tuttavia, ricevo ancora l’errore “Errore: è necessario installare almeno un pacchetto postgresql-client-.”

Ok, questo non lo so.

Forse prova direttamente dalla console di Rails: rails c

con

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

Questo potrebbe darti lo stesso risultato senza passare attraverso il database.

Funziona?

Mi dispiace davvero tanto per il comportamento sciocco che ho avuto.

Ho installato Rails e sembra che funzioni. L’ho eseguito anche con “rails c”. Sembra funzionare anche quello, ma quando inserisco il comando, appare così:

“root@community:/var/discourse# ActiveRecord::Base.connection.execute(<<~SQL)
-bash: errore di sintassi vicino al token imprevisto `<<’
root@community:/var/discourse# SELECT id, path, incoming_domain_id
SELECT: comando non trovato
root@community:/var/discourse# FROM incoming_referers
FROM: comando non trovato
root@community:/var/discourse# WHERE path = ‘//’
WHERE: comando non trovato
root@community:/var/discourse# AND incoming_domain_id = 5
AND: comando non trovato
root@community:/var/discourse# SQL”

Non preoccuparti, forse le mie istruzioni non sono poi così chiare :slight_smile:

Ti confesso che sono un po’ perplesso: dici di aver appena installato Rails ma di non riuscire ad accedere al database. Forse la situazione è diversa perché si tratta di una versione più vecchia, ma onestamente penso di aver raggiunto i miei limiti.

Comunque, una volta dentro Rails, il prompt dovrebbe essere diverso. Dal tuo output, sembra che tu non sia ancora nella console di Rails.

A dire il vero, non credo nemmeno che tu sia dentro il container. Hai provato a eseguire ./launcher enter app?