'bundle exec rake db:migrate' выполняется долго из-за миграции календаря

Ребята — большое спасибо за помощь здесь. И @pfaffman, пожалуйста, не оставайтесь работать допоздна из-за меня. Если вам нужно уйти вечером, посетители форума просто подождут.

discourse=# SELECT pid, age(clock_timestamp(), query_start), usename, query 
FROM pg_stat_activity 
WHERE query != '<IDLE>' AND query NOT ILIKE '%pg_stat_activity%' 
ORDER BY query_start desc;
 pid  |       age       |  usename  |                                                    query                                                     
------+-----------------+-----------+--------------------------------------------------------------------------------------------------------------
   47 |                 |           | 
   50 |                 | postgres  | 
   48 |                 |           | 
   46 |                 |           | 
   45 |                 |           | 
 3231 | 00:07:57.332835 | discourse | 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                                                                       +
      |                 |           |   )                                                                                                         +
      |                 |           | 
 3232 | 00:07:57.347747 | discourse | SELECT pg_try_advisory_lock(2859260972035668690)
(7 строк)

О боже

discourse=# select count(*) from calendar_events;
  count   
----------
 69724384
(1 строка)

Вау, что это такое?

Это плагин календаря

Он работает 7 часов или 7 минут?

В прошлый раз оно работало гораздо дольше 7 минут, но не 7 часов, по крайней мере у меня.

Плагин календаря почти не используется — его можно удалить, если это хоть чем-то поможет.

Круто.

Фалько — может, просто удалить плагин?

А потом удалить таблицы плагина?

РЕДАКТИРОВАНО: календарь удалён, база данных перенесена, и ассеты компилируются. Сайт должен заработать ещё через несколько минут.

Меня просто изумляет, что, черт возьми, произошло с календарем, чтобы вызвать такую проблему?!

Оно ЖИВЁТ. Абсолютные легенды.

Я напишу тебе утром, как всё привести в порядок.

Спасибо, что пошли на всё возможное <3

      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 day')
                    AND ce2.start_date <= (ce3.start_date + INTERVAL '1 day')
                    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
        )

Нам нужно понять, может ли это всё ещё быть ошибкой в плагине или это уже произошло в прошлом.

Можете ли вы подтвердить, что большинство дубликатов записей относится к прошлому, или же до сих пор слишком много строк с недавним created_at?

Спасибо!

discourse=# select count(*) from calendar_events where created_at > NOW()-INTERVAL '200 days';
  count
----------
 25970368
(1 row)

discourse=# select count(*) from calendar_events where created_at > NOW()-INTERVAL '100 days';
  count
----------
 14377700
(1 row)

discourse=# select count(*) from calendar_events where created_at > NOW()-INTERVAL '50 days';
  count
---------
 7207939
(1 row)

discourse=# select count(*) from calendar_events where created_at > NOW()-INTERVAL '5 days';
 count
--------
 589938
(1 row)
discourse=# select count(*) from calendar_events where created_at < NOW()-INTERVAL '200 days';
  count
----------
 43754016
(1 row)