Mudei o URL do meu site Discourse e estou seguindo as instruções em Change the domain name or rename your Discourse. Ao tentar executar o remap, estou recebendo repetidamente o seguinte erro. Ele continua me dizendo para reexecutar o script, mas o mesmo erro ocorre a cada vez.[1]
Não tenho certeza qual é o meu próximo passo aqui e ficaria grato por alguma orientação. Obrigado desde já!
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.
Eu sei que a definição de insanidade é repetir a mesma coisa várias e várias vezes e esperar um resultado diferente! ↩︎
parece haver uma colisão de restrição na tabela de analytics do Postgres. seu banco de dados já inclui registros do novo domínio em datas específicas, então a ferramenta de remapeamento provavelmente está criando duplicatas e o Postgres está rejeitando-as.
eu tentaria excluir os registros do domínio antigo apenas na tabela específica para as datas em que o novo domínio já possui dados, a fim de preservar os dados históricos e desbloquear a ferramenta de remapeamento. faça um backup de segurança primeiro, no entanto.
tente isso:
cd /var/discourse
./launcher enter app
# crie um backup de segurança
discourse backup
# entre no console do banco de dados
sudo -u postgres psql discourse
/* encontre o nome exato da tabela vinculada a este índice */
SELECT tablename
FROM pg_indexes
WHERE indexname = 'idx_bprd_rollups_date_referrer_unique';
assumindo que a consulta acima retorne browser_pageview_rollup_details, use esse nome de tabela na próxima consulta
/* exclua os registros de analytics em colisão */
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'
);
/* saia do postgres */
\q
então execute a ferramenta de remapeamento novamente
O que eu faço é fazer backup do banco de dados, alterar a URL e, em seguida, restaurar e deixar o remapper do Discourse fazer o trabalho. Esse código é usado pelo Discourse hosting e, se falhar, alguém que possa corrigir o problema notará.
Mas, sim, esses links de referrer causaram todo tipo de problema.
discourse db não funciona para mim — estou usando sudo -u postgres psql discourse.
A tabela retornada pela primeira consulta era, na verdade, browser_pageview_referrer_daily_rollups, então usei essa na segunda consulta.
Agora estou recebendo um erro diferente. Quando executo essa segunda consulta novamente, ela não exclui nada.
Erro: ERRO: valor de chave duplicada viola restrição única "idx_bprd_rollups_date_referrer_unique"
DETALHES: Chave (date, normalized_referrer)=(2026-06-30, digitallysovereign.org/c/members/32) já existe.
O remapeamento foi aplicado apenas parcialmente devido ao erro acima. Execute o script novamente.
ok, acho que a consulta inicial usava correspondência exata e perdeu todas as linhas com caminhos anexados. eu tentaria esta consulta sql, acho (não consigo testar nada disso porque não preciso alterar um nome de domínio em meu nameserver).
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
se isso funcionar sem erro, execute a ferramenta de remapeamento e a tarefa rake de rebake que postei acima.
eu fiz uma migração de fórum para um novo servidor e um novo nome de domínio há alguns meses, mas a ferramenta de remapeamento funcionou perfeitamente para mim na primeira vez.
Parece que estou avançando devagar pelo banco de dados. 24 registros foram excluídos! Agora estou em 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, vamos tentar a mesma lógica, mas primeiro vamos verificar:
SELECT tablename
FROM pg_indexes
WHERE indexname = 'unique_post_links';
deveria retornar topic_links? portanto, este é o próximo passo 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
acho que isso está perto do final do esquema do banco de dados, então provavelmente será o último obstáculo (espero) antes de executar o remapeamento e a tarefa rake que postei acima…
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...
topic_links=1449
topic_search_data=11
topics=11
user_auth_token_logs=5
user_histories=131
Done
Você pode me explicar o que é o discourse db e por que você pode fazer isso e eu não? Parece mais fácil de lembrar do que sudo -u postgres psql discourse!
eu estava apenas me lembrando mal, porque é raro que eu faça esse tipo de SQL no container. eu achei que esse era o comando correto. acho que é porque o Discourse tem comandos integrados como discourse backup e discourse remap.
bem, só por diversão, fiz um PR rápido para o arquivo script/discourse usar discourse db. não tenho certeza se é algo que a equipe queira adicionar, mas realmente facilita entrar no console sql dentro do container.