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 حجمه 11 جيجابايت:
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 هو الغريب بشكل واضح.