Ich habe die URL meiner Discourse-Site geändert und folge den Anweisungen unter Change the domain name or rename your Discourse. Beim Versuch, remap auszuführen, erhalte ich immer wieder den folgenden Fehler. Das System weist mich an, das Skript erneut auszuführen, aber jedes Mal tritt derselbe Fehler auf.[1]
Ich bin mir nicht sicher, was mein nächster Schritt sein soll, und wäre für Orientierungshilfe dankbar. Vielen Dank im Voraus!
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.
Ich weiß, dass der Wahnsinn darin besteht, dasselbe immer und immer wieder zu tun und ein anderes Ergebnis zu erwarten! ↩︎
Sieht aus wie ein Constraint-Konflikt in der PostgreSQL-Analysetabelle. Deine Datenbank enthält bereits Einträge für die neue Domain zu bestimmten Daten, sodass das Remap-Tool wahrscheinlich Duplikate erstellt, die von PostgreSQL abgelehnt werden.
Ich würde versuchen, die alten Domain-Einträge nur für die Daten zu löschen, an denen die neue Domain bereits Daten hat, um historische Daten zu erhalten und das Remap-Tool freizuschalten. Aber erst ein Sicherheitsbackup erstellen.
Versuche dies:
cd /var/discourse
./launcher enter app
# Erstelle ein Sicherheitsbackup
discourse backup
# Betrete die Datenbankkonsole
sudo -u postgres psql discourse
/* Finde den exakten Tabellennamen, der mit diesem Index verknüpft ist */
SELECT tablename
FROM pg_indexes
WHERE indexname = 'idx_bprd_rollups_date_referrer_unique';
Angenommen, die obige Abfrage gibt browser_pageview_rollup_details zurück, verwende dann diesen Tabellennamen in der nächsten Abfrage.
/* Lösche die kollidierenden Analyseinträge */
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'
);
/* Verlasse PostgreSQL */
\q
Was ich mache, ist, die Datenbank zu sichern, die URL zu ändern und dann wiederherzustellen und den Discourse Remapper die Arbeit erledigen zu lassen. Dieser Code wird von Discourse Hosting verwendet, und wenn er fehlschlägt, wird jemand, der es beheben kann, darauf achten.
Aber ja, diese Referrer-Links haben alle möglichen Probleme verursacht.
discourse db funktioniert bei mir nicht – ich verwende sudo -u postgres psql discourse.
Die Tabelle, die durch die erste Abfrage zurückgegeben wurde, war tatsächlich browser_pageview_referrer_daily_rollups, also habe ich diese in der zweiten Abfrage verwendet.
Jetzt erhalte ich einen anderen Fehler. Wenn ich diese zweite Abfrage erneut ausführe, wird nichts gelöscht.
Error: ERROR: duplicate key value violates unique constraint "idx_bprd_rollups_date_referrer_unique"
DETAIL: Key (date, normalized_referrer)=(2026-06-30, digitallysovereign.org/c/members/32) already exists.
The remap has only been partially applied due to the error above. Please re-run the script again.
Fehler: FEHLER: duplikater Schlüsselwert verletzt eindeutige Einschränkung „idx_bprd_rollups_date_referrer_unique“
DETAIL: Schlüssel (date, normalized_referrer)=(2026-06-30, Members only - Digitally Sovereign) existiert bereits.
Die Zuordnung wurde aufgrund des oben genannten Fehlers nur teilweise angewendet. Bitte führen Sie das Skript erneut aus.
ok, ich nehme an, die ursprüngliche Abfrage hat exakte Übereinstimmung verwendet und alle Zeilen mit Pfaden übersehen. Ich würde es mit dieser SQL-Abfrage versuchen (ich kann das alles nicht wirklich testen, da ich keinen Bedarf habe, einen Domainnamen auf meinem Nameserver zu ändern).
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
Wenn das ohne Fehler funktioniert, führe dann das Remap-Tool und die oben gepostete Rebake-Rake-Aufgabe aus.
Ich habe vor ein paar Monaten ein Forum auf einen neuen Server und eine neue Domainname migriert, aber das Remap-Tool hat beim ersten Mal perfekt für mich funktioniert.
Ich schaffe es langsam, aber sicher durch die Datenbank, scheint es. 24 Datensätze wurden gelöscht! Jetzt bin ich bei 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, probieren wir dieselbe Logik, aber lassen Sie uns zuerst verifizieren:
SELECT tablename
FROM pg_indexes
WHERE indexname = 'unique_post_links';
sollte topic_links zurückgeben? somit ist dies der nächste logische Schritt:
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
ich denke, wir sind nahe am Ende des Datenbankschemas, also sollte dies wahrscheinlich das letzte Hindernis (hoffentlich) sein, bevor wir die Remap- und Rake-Aufgabe ausführen, die ich oben gepostet habe…
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
Könntest du mir erklären, was discourse db ist und warum du das ausführen kannst, ich aber nicht? Das scheint einfacher zu merken als sudo -u postgres psql discourse!
Ich habe mich nur falsch erinnert, weil es selten vorkommt, dass ich diese Art von SQL im Container ausführe. Ich dachte tatsächlich, das wäre der richtige Befehl. Ich glaube, es liegt daran, dass Discourse eingebaute Befehle wie discourse backup und discourse remap hat.
Nur so als Experiment habe ich schnell einen PR für die script/discourse-Datei erstellt, um discourse db zu verwenden. Ich bin mir nicht sicher, ob das Team das wirklich aufnehmen möchte, aber es erleichtert den Einstieg in die sql-Konsole innerhalb des Containers.