以下の問題が発生しています。10 年以上 Discourse フォーラムを運用してきましたが、しばらく更新をインストールできなくなったため、新しいサーバーのセットアップを検討しました。
旧サーバーのバージョン:3.4.0.beta4-dev
新サーバー:最新バージョン
バックアップファイル(アップロードを除く)のサイズはすでに 673.2 MB の .gz ファイルです。
残念ながら、復元処理がたびたび中止されます。ログファイルには以下のエラーが記録されています。
[2026-06-16 07:54:52] ERROR: could not create unique index "index_incoming_referers_on_path_and_incoming_domain_id"
[2026-06-16 07:54:52] DETAIL: Key (path, incoming_domain_id)=(//, 5) is duplicated.
[2026-06-16 07:54:52] EXCEPTION: psql failed: DETAIL: Key (path, incoming_domain_id)=(//, 5) is duplicated.
[2026-06-16 07:54:52] /var/www/discourse/lib/backup_restore/database_restorer.rb:93:in 'BackupRestore::DatabaseRestorer#restore_dump'
/var/www/discourse/lib/backup_restore/database_restorer.rb:26:in 'BackupRestore::DatabaseRestorer#restore'
/var/www/discourse/lib/backup_restore/restorer.rb:61:in 'BackupRestore::Restorer#run'
/var/www/discourse/script/spawn_backup_restore.rb:20:in 'Object#restore'
/var/www/discourse/script/spawn_backup_restore.rb:33:in 'block in '
/var/www/discourse/script/spawn_backup_restore.rb:4:in 'Kernel#fork'
/var/www/discourse/script/spawn_backup_restore.rb:4:in ''
[2026-06-16 07:54:52] Trying to rollback...
この問題を解決し、過去 10 年分のデータを失わずに復元するにはどうすればよいでしょうか?
ご支援をいただき、ありがとうございます!
chapoi
2026 年 6 月 16 日午前 9:48
2
こんにちは、そして9年ぶりのご復帰おめでとうございます!
長年続くフォーラムを見られるのは素晴らしいですね。
これは、こちらで議論されているのと同じインデックスの問題だと思います: Can't restore due to corrupt indexes (with some clues on how to deal with corrupt indexes)
具体的な状況は以下の通りです:
incoming_referers テーブルは、訪問者をあなたのフォーラムへ誘導したURLパスを追跡します。ここにはユニークインデックスがあり、2つの行が同じパスとドメインの組み合わせを持つことはできません。
あなたのデータベースには、path='//' かつ incoming_domain_id=5 という行が2つ存在します。復元時にこのユニークインデックスの再構築を試みると、重複が見つかり、すべての復元トランザクションが中止されます。
そのため、重複する incoming_referers を見つけて削除し、新しいサーバーに復元するための新しいバックアップを作成する必要があります。
こちらの手順が記載されたトピック が参考になるかもしれません。
glynhudson:
コンテナに入る
./launcher enter app
データベースに接続
su postgres -c 'psql discourse'
重複を探す
discourse=# select * from incoming_referers where path LIKE '%/search/' ORDER BY incoming_domain_id;`
id | path | incoming_domain_id
------+------------+--------------------
3339 | /search/ | 33
6257 | /search/ | 91
1567 | /search/ | 298
1777 | /search/ | 341
3010 | /search/ | 418
6247 | /search/ | 418
4293 | /search/ | 644
2899 | /search/ | 653
3447 | /search/ | 793
3696 | /search/ | 852
4395 | /a/search/ | 1050
6968 | /search/ | 1305
5634 | /search/ | 1387
5834 | /search/ | 1437
6519 | /search/ | 1637
7127 | /search/ | 1787
7280 | /search/ | 1827
(17 rows)
重複を削除
DELETE FROM incoming_referers WHERE path LIKE '%/search/' AND id IN (6247);
その後、再構築
discourse=# REINDEX SCHEMA CONCURRENTLY public;
WARNING: cannot reindex invalid index "public.incoming_referers_pkey_ccnew" concurrently, skipping
WARNING: cannot reindex invalid index "public.index_incoming_referers_on_path_and_incoming_domain_id_ccnew" concurrently, skipping
WARNING: cannot reindex invalid index "pg_toast.pg_toast_20732_index_ccnew" concurrently, skipping
REINDEX
迅速なご返信をいただき、誠にありがとうございます!早速試してみます!
すみません、お手すきの際にご確認いただけますでしょうか。コマンド「discourse=# select * from incoming_referers where path LIKE ‘%/search/’ ORDER BY incoming_domain_id;」を実行すると、構文エラーが発生してしまいます。
chapoi
2026 年 6 月 16 日午前 10:31
6
「discourse=#」と入力しましたか ? なら、その部分を外してもう一度お試しください。
その後、「bash: 予期しないトークン `from’ 付近で構文エラー」というエラーメッセージが表示されます。
参考までに、現在の状態は以下の通りです: root@community-app:/var/www/discourse#
chapoi
2026 年 6 月 16 日午前 10:45
8
ああ、まだデータベースには接続していないようですね。
まず psql -U discourse discourse を実行してください(たぶん)。
そうすると、プロンプトが discourse=# に変わるはずです。
はい、"apt install postgresql-client-common"もインストールしました。しかし、まだ「エラー:少なくとも1つのpostgresql-client-パッケージをインストールする必要があります。」というエラーが表示されます。
chapoi
2026 年 6 月 16 日午前 11:05
10
それはわかりません。
直接 Rails コンソールで試してみてください:rails c
次に以下を実行します。
ActiveRecord::Base.connection.execute(<<~SQL)
SELECT id, path, incoming_domain_id
FROM incoming_referers
WHERE path = '//'
AND incoming_domain_id = 5
SQL
これにより、データベースを介さずに同じ結果が得られるかもしれません。
うまくいきましたか?
本当に、本当に愚かな行動をとってごめんなさい。
今、Railsをインストールしましたが、うまくいったようです。「rails c」でも実行してみましたが、これも動作しているようです。しかし、コマンドを入力すると、次のような表示になります:
“root@community:/var/discourse# ActiveRecord::Base.connection.execute(<<~SQL)
-bash: syntax error near unexpected token `<<’
root@community:/var/discourse# SELECT id, path, incoming_domain_id
SELECT: コマンドが見つかりません
root@community:/var/discourse# FROM incoming_referers
FROM: コマンドが見つかりません
root@community:/var/discourse# WHERE path = ‘//’
WHERE: コマンドが見つかりません
root@community:/var/discourse# AND incoming_domain_id = 5
AND: コマンドが見つかりません
root@community:/var/discourse# SQL”
chapoi
2026 年 6 月 16 日午前 11:26
12
心配しないでください。もしかしたら私の指示があまり良くなかったのかもしれません
Railsをインストールしたばかりなのにデータベースにアクセスできないというのは、私としても少し混乱しています。もしかしたら古いバージョンだからすべてが異なるのかもしれませんが、私もこれ以上は詳しくありません。
いずれにせよ、Railsに入った後はプロンプトが異なるはずです。出力結果を見ると、まだRailsコンソールに入っていないようです。
もしかしたら、実際のコンテナにも入っていないのかもしれません。./launcher enter app を実行しましたか?