Cambié la URL de mi sitio de Discourse y estoy siguiendo las instrucciones en Change the domain name or rename your Discourse. Al intentar ejecutar remap, recibo repetidamente el siguiente error. El sistema insiste en que vuelva a ejecutar el script, pero cada vez aparece el mismo error.[1]
No estoy seguro de cuál es mi siguiente paso y agradecería cualquier orientación. ¡Gracias de antemano!
root@digitallysovereign:/var/discourse# ./launcher enter app
x86_64 arch detected.
root@digitallysovereign-app:/var/www/discourse# discourse remap discourse.tobiaseigen.org digitallysovereign.org
Rewriting all occurrences of discourse.tobiaseigen.org to digitallysovereign.org
WILL RUN ON 'default' DB
THIS TASK WILL REWRITE DATA, ARE YOU SURE (type YES): YES
Remapping tables on default...
ai_api_audit_logs=919
ai_secrets=1
backup_metadata=1
browser_pageview_events=3664
Error: ERROR: duplicate key value violates unique constraint "idx_bprd_rollups_date_referrer_unique"
DETAIL: Key (date, normalized_referrer)=(2026-07-01, digitallysovereign.org) already exists.
The remap has only been partially applied due to the error above. Please re-run the script again.
root@digitallysovereign-app:/var/www/discourse# discourse remap discourse.tobiaseigen.org digitallysovereign.org
Rewriting all occurrences of discourse.tobiaseigen.org to digitallysovereign.org
WILL RUN ON 'default' DB
THIS TASK WILL REWRITE DATA, ARE YOU SURE (type YES): YES
Remapping tables on default...
Error: ERROR: duplicate key value violates unique constraint "idx_bprd_rollups_date_referrer_unique"
DETAIL: Key (date, normalized_referrer)=(2026-07-01, digitallysovereign.org) already exists.
The remap has only been partially applied due to the error above. Please re-run the script again.
root@digitallysovereign-app:/var/www/discourse# discourse remap discourse.tobiaseigen.org digitallysovereign.org
Rewriting all occurrences of discourse.tobiaseigen.org to digitallysovereign.org
WILL RUN ON 'default' DB
THIS TASK WILL REWRITE DATA, ARE YOU SURE (type YES): YES
Remapping tables on default...
Error: ERROR: duplicate key value violates unique constraint "idx_bprd_rollups_date_referrer_unique"
DETAIL: Key (date, normalized_referrer)=(2026-07-01, digitallysovereign.org) already exists.
The remap has only been partially applied due to the error above. Please re-run the script again.
¡Ya sé que la definición de locura es repetir lo mismo una y otra vez esperando un resultado diferente! ↩︎
parece que hay una colisión de restricciones en la tabla de análisis de Postgres. tu base de datos ya incluye registros del nuevo dominio en fechas específicas, por lo que es probable que la herramienta de remapeo esté creando duplicados y Postgres los esté rechazando.
te sugiero que intentes eliminar los registros del dominio antiguo en la tabla específica solo para las fechas en las que el nuevo dominio ya tiene datos, con el fin de preservar los datos históricos y desbloquear la herramienta de remapeo. haz una copia de seguridad primero, por si acaso.
prueba esto:
cd /var/discourse
./launcher enter app
# crea una copia de seguridad
discourse backup
# entra en la consola de la base de datos
sudo -u postgres psql discourse
/* busca el nombre exacto de la tabla asociada a este índice */
SELECT tablename
FROM pg_indexes
WHERE indexname = 'idx_bprd_rollups_date_referrer_unique';
asumiendo que la consulta anterior devuelve browser_pageview_rollup_details, usa ese nombre de tabla en la siguiente consulta
/* elimina los registros de análisis que colisionan */
DELETE FROM browser_pageview_rollup_details
WHERE normalized_referrer = 'discourse.tobiaseigen.org'
AND date IN (
SELECT date
FROM browser_pageview_rollup_details
WHERE normalized_referrer = 'digitallysovereign.org'
);
/* sale de postgres */
\q
luego ejecuta la herramienta de remapeo nuevamente
Lo que yo hago es hacer una copia de seguridad de la base de datos, cambiar la URL y luego restaurar y dejar que el remapeador de Discourse haga el trabajo. Ese código es utilizado por Discourse hosting y si falla, alguien que pueda solucionarlo se dará cuenta.
Pero sí, esos enlaces de referencia han causado todo tipo de problemas.
discourse db no funciona para mí, así que estoy usando sudo -u postgres psql discourse.
La tabla que devolvió la primera consulta era en realidad browser_pageview_referrer_daily_rollups, así que la usé en la segunda consulta.
Ahora estoy obteniendo un error diferente. Cuando vuelvo a ejecutar esa segunda consulta, no elimina nada.
Error: ERROR: el valor de clave duplicada viola la restricción única «idx_bprd_rollups_date_referrer_unique»
DETALLE: La clave (date, normalized_referrer)=(2026-06-30, digitallysovereign.org/c/members/32) ya existe.
El remapeo solo se ha aplicado parcialmente debido al error anterior. Vuelva a ejecutar el script.
ok, supongo que la consulta inicial usó una coincidencia exacta y omitió todas las filas con rutas adjuntas. Intentaría esta consulta SQL, creo (no puedo probar nada de esto porque no necesito cambiar un nombre de dominio en mi servidor de nombres).
DELETE FROM browser_pageview_referrer_daily_rollups old_table
WHERE old_table.normalized_referrer LIKE '%discourse.tobiaseigen.org%'
AND EXISTS (
SELECT 1
FROM browser_pageview_referrer_daily_rollups new_table
WHERE new_table.date = old_table.date
AND new_table.normalized_referrer = REPLACE(old_table.normalized_referrer, 'discourse.tobiaseigen.org', 'digitallysovereign.org')
);
\q
si eso funciona sin errores, entonces ejecuta la herramienta de remapeo y la tarea rake de rehorneado que publiqué arriba.
hice una migración de un foro a un servidor nuevo y un nombre de dominio nuevo hace unos meses, pero la herramienta de remapeo funcionó perfectamente para mí la primera vez.
Parece que estoy avanzando poco a poco por la base de datos. ¡Se eliminaron 24 registros! Ahora estoy en unique_post_links.
root@digitallysovereign-app:/var/www/discourse# discourse remap discourse.tobiaseigen.org digitallysovereign.org
Rewriting all occurrences of discourse.tobiaseigen.org to digitallysovereign.org
WILL RUN ON 'default' DB
THIS TASK WILL REWRITE DATA, ARE YOU SURE (type YES): yes
Remapping tables on default...
browser_pageview_referrer_daily_rollups=1466
categories=2
chat_message_links=4
chat_message_search_data=4
chat_messages=5
discourse_activity_pub_collections=1
discourse_activity_pub_objects=1
drafts=4
email_logs=797
group_histories=2
groups=2
incoming_emails=21
moved_posts=2
notifications=10
post_localizations=51
post_revisions=31
post_search_data=226
posts=774
site_settings=1
stylesheet_cache=1168
Error: ERROR: duplicate key value violates unique constraint "unique_post_links"
DETAIL: Key (topic_id, post_id, url)=(581, 3696, https://digitallysovereign.org) already exists.
The remap has only been partially applied due to the error above. Please re-run the script again.
ok, probemos con la misma lógica, pero primero verifiquemos:
SELECT tablename
FROM pg_indexes
WHERE indexname = 'unique_post_links';
¿debería devolver topic_links? así que este es el siguiente paso lógico:
DELETE FROM topic_links old_link
WHERE old_link.url LIKE '%discourse.tobiaseigen.org%'
AND EXISTS (
SELECT 1
FROM topic_links new_link
WHERE new_link.topic_id = old_link.topic_id
AND new_link.post_id = old_link.post_id
AND new_link.url = REPLACE(old_link.url, 'discourse.tobiaseigen.org', 'digitallysovereign.org')
);
\q
creo que esto está cerca del final del esquema de la base de datos, así que probablemente sea el último obstáculo (espero) antes de ejecutar el remapeo y la tarea rake que publiqué arriba…
root@digitallysovereign-app:/var/www/discourse# discourse remap discourse.tobiaseigen.org digitallysovereign.org
Reescribiendo todas las ocurrencias de discourse.tobiaseigen.org a digitallysovereign.org
SE EJECUTARÁ EN LA BD 'default'
ESTA TAREA REESCRIBIRÁ DATOS, ¿ESTÁS SEGURO? (escribe SÍ): yes
Remapeando tablas en default...
topic_links=1449
topic_search_data=11
topics=11
user_auth_token_logs=5
user_histories=131
Hecho
Simplemente me estaba equivocando al recordar, porque es raro que haga este tipo de SQL en el contenedor. Creí que ese era el comando correcto. Creo que se debe a que Discourse tiene comandos integrados como discourse backup y discourse remap.
bueno, solo por curiosidad, hice un PR rápido para el archivo script/discourse para usar discourse db. No estoy seguro de que al equipo le interese añadirlo, pero facilita entrar en la consola sql dentro del contenedor.