서버를 새로운 호스트로 이전하려고 시도 중입니다. 백업 파일을 다운로드하여 새 호스트에 업로드했습니다. 그 후 discourse를 새로 설치하고, 명령줄에서 다음 안내에 따라 진행했습니다:
불행히도 discourse restore databasename 명령은 다음과 같은 오류로 실패합니다:
ALTER TABLE
ALTER TABLE
ALTER TABLE
ERROR: could not create unique index "posts_search_pkey"
DETAIL: Key (post_id)=(36946) is duplicated.
EXCEPTION: psql failed: DETAIL: Key (post_id)=(36946) is duplicated.
/var/www/discourse/lib/backup_restore/database_restorer.rb:92:in `restore_dump'
/var/www/discourse/lib/backup_restore/database_restorer.rb:26:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:51:in `run'
script/discourse:149:in `restore'
데이터베이스 파일에 문제가 있는 것 같습니다. 이 오류를 수정하는 방법에 대한 방향을 알려줄 수 있는 분 있으신가요? 원본 서버에 여전히 접근할 수 있으며, 정상적으로 작동하는 것으로 보입니다.
백업을 다운로드하기 전에 데이터베이스를 분석(및 수정?)할 수 있는 SQL 명령이나 다른 방법이 있을까요?
./launcher enter app
su - postges
psql discourse
select id from post_search_data were post_id>86918 and post_id<86921;
--- id를 얻은 후 ----
delete from post_search_data where id=ID_FROM_LAST_QUERY
더 많은 작업이 필요할 수 있습니다.
다른 누군가가 더 많은 도움을 줄 수 있겠지만, 서버에 로그인하지 않은 상태에서는 제가 할 수 있는 것은 이 정도입니다. 더 많은 도움이 필요하시다면 Marketplace 채널에 게시하거나 저에게 직접 연락해 주세요.
아니면 그냥 지우고 재생성되도록 두는 것이 안전할 수도 있지만, 그 부분은 확신하지 못하겠습니다.
discourse=# reindex index concurrently "posts_search_pkey";
ERROR: could not create unique index "posts_search_pkey_ccnew2"
DETAIL: Key (post_id)=(116038) is duplicated.
discourse=# delete from post_search_data
where post_id = 116038;
DELETE 2
discourse=# delete from post_search_data
where post_id = 116038;
DELETE 0
discourse=# reindex index concurrently "posts_search_pkey";
ERROR: could not create unique index "posts_search_pkey_ccnew3"
DETAIL: Key (post_id)=(9336) is duplicated.
discourse=# delete from post_search_data
where post_id = 9336;
DELETE 1
.
.
.
.
discourse=# reindex index concurrently "posts_search_pkey";
REINDEX
모든 것이 정상으로 보였을 때, 전체 백업을 수행하고 새 서버에 문제 없이 복원했습니다.
모든 분들의 시간 내어주심에 감사드립니다. discourse를 정말 좋아합니다!
배운 교훈: 가끔은 백업이 제대로 되어 있는지 확인해야 합니다 저는 매일 백업을 수행하고, 월간 "스냅샷"도 함께 유지하고 있습니다. 손상되지 않은 데이터베이스를 가진 가장 오래된 백업은 4개월 전 것이었습니다