Я выполнил импорт phpBB3 для сайта. У пользователя-администратора тысячи сообщений, и это отображается на странице сводки пользователя, а также по адресу https://estude.profcaju.com/u/USER/activity, но когда этот пользователь переходит на /posted, он видит только темы, созданные после импорта.
Когда я открываю импортированную тему, созданную этим пользователем, и проверяю запись TopicUser для этой темы/пользователя, поле posted установлено в false. Я запустил все доступные команды ensure_consistency (TopicUser, Topic, User).
Если я вручную установлю posted в true в записи TopicUser, тема появится в разделе /posted.
Стоит ли мне выполнить что-то вроде TopicUser.where(user_id: 1).update_all(posted: true)? Должен ли я сделать это для всех пользователей?
Похоже, проблема в задаче ensure_consistency для rake. Я только что проверил миграцию, над которой сейчас работаю (задачу ensure_consistency ещё не запускал), и оказалось, что записи TopicUser уже были созданы со значением posted: false (значение по умолчанию). Когда задача rake доходит до этого места, возникает ошибка «дубликат ключа», и записи не создаются из-за конструкции 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