Restauration à partir de la sauvegarde échouée : échec de la création de l'index postgres

Bonjour à tous,

J’ai fait fonctionner Discourse sans problème pendant plusieurs années.

Aujourd’hui, j’ai tenté une mise à niveau via l’interface web de la version 2.4.0beta-something que j’utilisais vers la version actuelle (2.5.0beta5). Cela… ne s’est pas bien passé. Je n’ai pas pris de bonnes notes, mais il semblait que PostgreSQL ne démarrait pas correctement en raison du fait que le répertoire de données PostgreSQL n’était pas détenu par le bon utilisateur.

J’ai pensé essayer de cloner mes anciens conteneurs/app.yml vers app2 et de restaurer à partir d’une sauvegarde. Le nouveau conteneur s’est construit et j’ai suivi les instructions pour exécuter une sauvegarde en ligne de commande (Restore a backup from the command line - #12). « discourse restore » échoue avec :

ERROR:  could not create unique index "index_incoming_referers_on_path_and_incoming_domain_id"
DETAIL:  Key (path, incoming_domain_id)=(//viewer/, 16) is duplicated.
EXCEPTION: psql failed: DETAIL:  Key (path, incoming_domain_id)=(//viewer/, 16) is duplicated.
/var/www/discourse/lib/backup_restore/database_restorer.rb:95:in `restore_dump'
/var/www/discourse/lib/backup_restore/database_restorer.rb:26:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:49:in `run'
script/discourse:143:in `restore'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/command.rb:27:in `run'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor.rb:392:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/base.rb:485:in `start'
script/discourse:284:in `<top (required)>'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `load'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `kernel_load'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:28:in `run'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:476:in `exec'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor.rb:399:in `dispatch'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:30:in `dispatch'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/base.rb:476:in `start'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:24:in `start'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:46:in `block in <top (required)>'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/friendly_errors.rb:123:in `with_friendly_errors'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:34:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Trying to rollback...
Rolling back...
Cleaning stuff up...

Toute suggestion sur la façon de procéder serait la bienvenue.

Merci !
–dustin

Bienvenue, Dustin. Désolé d’apprendre que vous rencontrez des problèmes.

Votre index est corrompu. Consultez PostgreSQL 12 update - #238.

1 « J'aime »

Merci pour votre réponse. Finalement, au lieu d’essayer de créer une nouvelle application et de restaurer à partir d’une sauvegarde, je suis revenu à mon application d’origine et j’ai exécuté « ./launcher rebuild app » plusieurs fois (en tant que root, ce que je n’aurais pas cru nécessaire, mais je pense avoir configuré mon site en tant que root à l’origine, ce qui explique cela), et maintenant mon site est de nouveau opérationnel ! Hourra !

Souvenez-vous de ne jamais toucher par hasard au bouton de mise à jour qui a l’air si amical !

Merci,
–dustin

2 « J'aime »

Vous avez toujours l’index corrompu. Vous voulez toujours qu’il ne soit pas corrompu.

1 « J'aime »

Wow, ce serait vraiment bien si la procédure de mise à niveau pouvait résoudre certains de ces problèmes !

Donc, après avoir installé le plugin Data Explorer et fouillé dans l’index incoming_referers, puis supprimé les autres index listés dans la requête ci-dessous :

Je rencontre toujours ceci :

discourse=# REINDEX SCHEMA CONCURRENTLY public;
WARNING:  cannot reindex invalid index "pg_toast.pg_toast_19337_index_ccnew" concurrently, skipping
WARNING:  cannot reindex invalid index "pg_toast.pg_toast_19337_index_ccnew1" concurrently, skipping

Et ils ne veulent pas être supprimés !

# drop index pg_toast_19337_index_ccnew1;
ERROR:  index "pg_toast_19337_index_ccnew1" does not exist
1 « J'aime »

[quote=“Dustin_Lang, post:5, topic:153014”]
AVERTISSEMENT : impossible de réindexer l'index invalide "pg_toast

Oui, les index corrompus sont quelque chose sur lequel nous nous penchons de très près, désolé pour les difficultés… en théorie, cela ne devrait pas être possible… mais vous savez ce qu’on dit sur la théorie par rapport à la pratique. J’espère que PG12 sera plus résistant à… quoi que ce soit que cela puisse être.

1 « J'aime »

C’est bon à entendre. C’est essentiellement le premier accroc que j’ai rencontré après des années de fonctionnement en mode « installer et oublier » (j’oublie souvent sur quelle machine il tourne).
Merci,
–dustin

1 « J'aime »