한 사이트에 phpbb3 가져오기를 수행했습니다. 관리자 사용자는 수천 개의 게시물을 가지고 있으며, 이는 사용자 요약 페이지와 https://estude.profcaju.com/u/USER/activity에 나열되어 있습니다. 하지만 해당 사용자가 /posted를 방문하면 가져오기 이후의 주제만 표시됩니다.
해당 사용자가 생성한 가져온 주제를 확인하고, 해당 주제/사용자에 대해 Topicuser를 조회해 보면 posted가 false로 설정되어 있습니다. 찾을 수 있는 모든 ensure_consistency 작업(TopicUser, Topic, User)을 실행해 보았습니다.
TopicUser에서 posted를 true로 설정하면 /posted에 표시됩니다.
TopicUser.where(user_id: 1).update_all(posted: true)와 같은 작업을 수행해야 하나요? 모든 사용자에게 그렇게 해야 하나요?
ensure_consistency rake 작업과 관련된 문제인 것 같습니다. 현재 진행 중인 마이그레이션(아직 ensure_consistency 작업을 실행하지 않은 상태)을 확인해 보니, TopicUser 레코드가 이미 posted: false(기본값)로 생성되어 있었습니다. rake 작업이 이 지점에 도달하면 “duplicate key” 오류가 발생하며, ON CONFLICT DO NOTHING 때문에 레코드가 생성되지 않습니다.
def insert_topic_users
log "Inserting topic users..."
DB.exec <<-SQL
INSERT INTO topic_users (user_id, topic_id, posted, last_read_post_number, first_visited_at, last_visited_at, total_msecs_viewed)
SELECT user_id, topic_id, 't' , MAX(post_number), MIN(created_at), MAX(created_at), COUNT(id) * #{MS_SPEND_CREATING_POST}
FROM posts
WHERE user_id > 0
GROUP BY user_id, topic_id
ON CONFLICT DO NOTHING
SQL
end
TopicUser 레코드는 create_topic 단계에서, 더 구체적으로는 여기에서 생성됩니다.