Estoy intentando restaurar una copia de seguridad en una nueva instancia de Discourse, ya que estoy realizando una migración de servidor. Lamentablemente, obtengo este error:
Desafortunadamente, esto no ayudó y sigo recibiendo este mensaje al restaurar:
[2021-07-03 16:53:41] ERROR: no se pudo crear el índice único "index_incoming_referers_on_path_and_incoming_domain_id"
[2021-07-03 16:53:41] DETAIL: La clave (path, incoming_domain_id)=(/search, 4502) está duplicada.
[2021-07-03 16:53:41] EXCEPTION: psql falló: DETAIL: La clave (path, incoming_domain_id)=(/search, 4502) está duplicada.
No tengo claro cómo solucionar esto.
He encontrado más duplicados con IncomingReferer.where("path LIKE '%/m/search%'"), así que también usé destroy en estos índices. Ahora mi instancia parece no funcionar en absoluto, incluso en el servidor antiguo, así que intentaré reconstruirla.
[2021-07-03 17:28:53] ERROR: no se pudo crear el índice único "index_incoming_referers_on_path_and_incoming_domain_id"
[2021-07-03 17:28:53] DETALLE: La clave (path, incoming_domain_id)=(/osmc/osmc, 2939) está duplicada.
[2021-07-03 17:28:53] EXCEPCIÓN: psql falló: DETALLE: La clave (path, incoming_domain_id)=(/osmc/osmc, 2939) está duplicada.
al intentar restaurar una nueva copia de seguridad.
Sin embargo, mi consola muestra que he limpiado las instancias en el servidor en ejecución (que ya está de nuevo en línea tras la reconstrucción):
Básicamente, debes intentar reconstruir el índice y seguir eliminando elementos hasta que puedas volver a indexarlo. Parece que estás haciendo lo correcto; solo necesitas continuar con eso para todas las entradas duplicadas.
Si tienes un presupuesto, puedes publicar en Marketplace.
No es legal en el Reino Unido exponer nuestra base de datos a terceros para resolver estos problemas, y aunque lo fuera, no tengo interés en hacerlo, ya que priorizo la protección de la privacidad de los usuarios.
Como mantenedor de software de código abierto, la idea de llevar esto al Marketplace me decepciona, especialmente cuando parece haber un reconocimiento tácito de que los problemas fueron introducidos por una actualización de Postgres que Discourse incluyó en su contenedor Docker. Utilizamos Discourse en el contenedor Docker porque comprendemos las dependencias estrechamente acopladas y queremos delegar la gestión de versiones y dependencias a la experiencia del equipo de Discourse.
Parece aceptado que se trata de una regresión en Postgres 12 y existen algunas mitigaciones potenciales. Sin embargo, los primeros informes llegaron hace más de un año, y estoy seguro de que habrá más usuarios afectados en el futuro si intentan restaurar una copia de seguridad.
Preferiría patrocinar tiempo de desarrollo para solucionar esto en el código principal de Discourse, de modo que otros también puedan beneficiarse. Mientras tanto, nuestro foro no funciona y tendré que buscar ayuda de alguien con conocimientos de administración de bases de datos Postgres.
Lo siento, no pude darte las instrucciones suficientes para resolver tu problema por tu cuenta, pero así es como lo expresaste. Pensé que sería un alivio, más que una decepción, saber que hay otras formas de volver a poner tu foro en línea.
En absoluto. No me debes nada, pero esperaba que tuvieras una solución rápida dado tu historial de publicaciones, y asumí que me había perdido algo obvio, considerando que tus respuestas parecían definitivas y el tema estaba cerrado.
Lamentablemente, esto sigue siendo un problema para nosotros y no podemos migrar servidores, lo cual es bastante preocupante.
Estaríamos dispuestos a pagar a alguien para resolver esto, pero tras este incidente y el reconocimiento repetido del problema en el foro sin una solución clara, estamos considerando seriamente migrar a otro software de foros como Flarum. Quizás no tenga tantas características como Discourse, pero es LAMP y yo (como no desarrollador web) puedo entenderlo y gestionarlo.
Cuando utilizamos el contenedor Docker de Discourse, esperábamos recibir soporte. Si hubiéramos implementado todo por separado y usado nuestra propia versión de Postgres, podría entender la respuesta. Pero hasta la fecha, solo hemos utilizado el entorno que ustedes recomiendan y proporcionan, y ahora nos encontramos en una situación muy complicada para migrar a un nuevo servidor (tenemos un plazo inminente).
En este punto, mi mejor opción es una copia de seguridad y restauración de volumen Docker, ya que las copias de seguridad de Discourse no son utilizables. Esto también es preocupante: tenemos copias de seguridad diarias, pero no podemos restaurarlas en un nuevo entorno de Discourse. Me pregunto cuántas otras personas se encontrarán con un problema similar en el futuro cercano.
De hecho, había bastantes errores en Postgres que podían causar la corrupción de índices. Creemos que la mayoría de ellos están resueltos en Postgres 13.x.