Restauración desde copia de seguridad fallida: error al crear índice de postgres

Hola a todos,

He estado ejecutando Discourse sin problemas durante varios años.

Hoy, intenté realizar una actualización de la interfaz web desde la versión 2.4.0beta-something que estaba ejecutando hasta la actual (2.5.0beta5). Esto… no salió bien. No tomé buenas notas, pero pareció que postgres no se iniciaba correctamente debido a que el directorio de datos de postgres no era propiedad del usuario correcto.

Pensé que probaría clonar mis contenedores antiguos/app.yml a app2 y restaurar desde una copia de seguridad. El nuevo contenedor se construyó y seguí las instrucciones para ejecutar una copia de seguridad por línea de comandos (Restore a backup from the command line - #12). “discourse restore ” falla con:

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

Cualquier sugerencia sobre cómo proceder sería muy bienvenida.

¡Gracias!
–dustin

Bienvenido, Dustin. Lamentamos que estés teniendo problemas.

Tienes un índice corrupto. Echa un vistazo a PostgreSQL 12 update - #238.

1 me gusta

Gracias por tu respuesta. Al final, en lugar de intentar crear una nueva aplicación y restaurar desde una copia de seguridad, volví a mi aplicación original y ejecuté ‘./launcher rebuild app’ varias veces (como root, algo que no habría pensado necesario, pero creo que configuré mi sitio como root originalmente, así que tiene sentido), ¡y ahora mi sitio está de vuelta! ¡Genial!

Recuérdame nunca tocar el botón de Actualizar que parece tan amigable.

gracias,
–dustin

2 Me gusta

Todavía tienes el índice dañado. Todavía quieres que no esté dañado.

1 me gusta

¡Vaya, sería realmente genial si el proceso de actualización pudiera solucionar algunos de estos problemas!

Así que después de instalar el plugin del explorador de datos y explorar el índice incoming_referers, y eliminar otros índices listados en la consulta aquí:

Pero aún obtengo:

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

¡Y esos no quieren ser eliminados!

# drop index pg_toast_19337_index_ccnew1;
ERROR:  index "pg_toast_19337_index_ccnew1" does not exist
1 me gusta

Ah, se necesita el prefijo pg_toast:

discourse=# drop index pg_toast.pg_toast_19337_index_ccnew1;
DROP INDEX
discourse=# drop index pg_toast.pg_toast_19337_index_ccnew;
DROP INDEX
discourse=# REINDEX SCHEMA CONCURRENTLY public;
REINDEX

Sí, los índices corruptos son algo que estamos analizando de cerca, disculpas por las dificultades… en teoría esto no debería ser posible… pero ya se sabe lo que dicen sobre la teoría frente a la práctica. Mi esperanza es que PG12 sea más resistente a… sea lo que sea esto.

1 me gusta

Me alegra saberlo. Este es básicamente el primer contratiempo que he experimentado después de años de disfrutar sin tener que preocuparme (de hecho, a menudo olvido en qué máquina está funcionando).Gracias,–dustin

1 me gusta