'bundle exec rake db:migrate'가 캘린더 마이그레이션으로 인해 오래 걸림

      DELETE
        FROM calendar_events ce
      WHERE
        ce.id IN (SELECT DISTINCT(ce3.id) FROM calendar_events ce2
                  LEFT JOIN calendar_events ce3 ON ce3.user_id = ce2.user_id AND ce3.description = ce2.description
                  WHERE ce2.start_date >= (ce3.start_date - INTERVAL '1 days')
                    AND ce2.start_date <= (ce3.start_date + INTERVAL '1 days')
                    AND ce2.timezone IS NOT NULL
                    AND ce3.timezone IS NULL
                    AND ce3.id != ce2.id
                    AND ce2.post_id IS NULL
                    AND ce3.post_id IS NULL
        )
    SQL

그러니까 이건 최소한 O(n^2) 연산인 것 같은데, 맞나요? 해당 테이블에는 69,724,384개의 행이 있으므로, 좋은 아이디어라고 보기 어렵습니다.

@Sikamikanico. 캘린더 플러그인을 다시 원하신다면, 모든 캘린더 이벤트를 삭제하고 처음부터 다시 시작하는 것이 좋을 것 같습니다. 다른 방법으로는 활성 서버에서 해당 쿼리를 실행하여 완료되는지 확인해 볼 수 있습니다.

근본 원인은 시간대가 변경될 때 이벤트를 중복 생성하는 플러그인의 버그라고 생각합니다.

calendar_events 테이블은 11GB입니다:

discourse=# SELECT pg_size_pretty( pg_total_relation_size('calendar_events') );
 pg_size_pretty 
----------------
 11 GB
(1 row)

가장 큰 테이블들은 다음과 같습니다:

       relation       | total_size 
----------------------+------------
 calendar_events      | 11 GB
 post_timings         | 6884 MB
 posts                | 2292 MB
 user_auth_token_logs | 1240 MB
 user_actions         | 1055 MB
(5 rows)

calendar_events만 확실히 비정상적입니다.