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
)
これは少なくとも 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 だけが明らかに異常です。