CREATE INDEX
ERROR: could not create unique index "index_incoming_referers_on_path_and_incoming_domain_id"
DETAIL: Key (path, incoming_domain_id)=(/m/search, 25) is duplicated.
EXCEPTION: psql failed: DETAIL: Key (path, incoming_domain_id)=(/m/search, 25) is duplicated.
최근 몇 주간 incoming_referers 테이블과 관련된 문제가 몇 번 발생했습니다. 해당 테이블이 문제를 일으키는 이유는 정확히 알 수 없지만, 문제들이 서로 관련이 있을 가능성이 높아 보입니다. 아마도 Discourse 팀의 다른 구성원들이 중복 기록이 생성되는 원인에 대해 아이디어를 제시할 수 있을 것입니다.
백업 파일을 생성했던 사이트에 여전히 접근할 수 있나요? 그렇다면 해결 방법은 데이터베이스에서 중복된 기록을 삭제한 후 새로운 백업 파일을 생성하는 것입니다. 이를 위해 이전 서버에 SSH로 접속하여 /var/discourse 디렉토리로 이동해야 합니다:
discourse=# REINDEX SCHEMA CONCURRENTLY public;
ERROR: could not create unique index "index_incoming_referers_on_path_and_incoming_domain_id_ccnew"
DETAIL: Key (path, incoming_domain_id)=(/search/, 1905) is duplicated.
postgres=# \connect discourse
You are now connected to database "discourse" as user "postgres".
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_2782645_index_ccnew" concurrently, skipping
ERROR: could not create unique index "index_incoming_referers_on_path_and_incoming_domain_id_ccnew1"
DETAIL: Key (path, incoming_domain_id)=(/search/, 3433) is duplicated.
CONTEXT: parallel worker
그 4개 인덱스를 수동으로 다시 생성(REINDEX)해 보았습니다. 2개는 성공했고, 2개는 실패했습니다. 중복된 그 2개 행을 삭제해야 할까요?
discourse=# REINDEX INDEX CONCURRENTLY "public"."incoming_referers_pkey_ccnew";
REINDEX
discourse=# REINDEX INDEX CONCURRENTLY "public"."index_incoming_referers_on_path_and_incoming_domain_id_ccnew";
ERROR: could not create unique index "index_incoming_referers_on_path_and_incoming_domain_id_cc_ccnew"
DETAIL: Key (path, incoming_domain_id)=(/search/, 1861) is duplicated.
discourse=# REINDEX INDEX CONCURRENTLY "pg_toast"."pg_toast_2782645_index_ccnew";
REINDEX
discourse=# REINDEX INDEX CONCURRENTLY "index_incoming_referers_on_path_and_incoming_domain_id_ccnew1";
ERROR: could not create unique index "index_incoming_referers_on_path_and_incoming_domain_id_c_ccnew1"
DETAIL: Key (path, incoming_domain_id)=(/search/, 1905) is duplicated.