# Восстановление завершается ошибкой из-за нехватки места на диске при миграции, вызванной 70 млн событий календаря

**URL:** <https://meta.discourse.org/t/restore-fails-due-to-disk-space-on-migration-because-of-70m-calendar-events/395584>\
**Category:** Product Support\
**Tags:** events\
**Created:** [09.Февраль.2026 19:36:22 UTC](https://meta.discourse.org/t/restore-fails-due-to-disk-space-on-migration-because-of-70m-calendar-events/395584 "2026-02-09T19:36:22Z")\
**Posts on this page:** 1\
**Showing post:** 11

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [14.Февраль.2026 18:06:43 UTC](https://meta.discourse.org/t/restore-fails-due-to-disk-space-on-migration-because-of-70m-calendar-events/395584/11 "2026-02-14T18:06:43Z")

</div>

OK. Я выполняю восстановление на продакшн-сайте. Идет миграция.

Вот запрос, который выполняется уже 30 минут:

```plaintext
discourse=# SELECT pid, usename, state, query, query_start
FROM pg_stat_activity
WHERE state = 'active';
 pid | usename | state | query | query_start
-----+-----------+--------+--------------------------------------------------------------------------------------------------------------+-------------------------------
 519 | postgres | active | SELECT pid, usename, state, query, query_start +| 2026-02-14 17:58:35.473337+00
     | | | FROM pg_stat_activity +|
     | | | WHERE state = 'active'; |
 308 | discourse | active | DELETE +| 2026-02-14 17:26:08.12598+00
     | | | 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 +|
     | | | ) +|
     | | | |
(2 rows)

```

Это из этого файла:

> <https://github.com/discourse/discourse/blob/main/plugins/discourse-calendar/db/migrate/20231124021939_delete_similar_holidays.rb>

Здесь видно, что последняя миграция новее, но я полагаю, что это потому, что эта миграция относится к плагину, который был добавлен только что.

```plaintext
discourse=# SELECT version FROM schema_migrations ORDER BY version DESC LIMIT 1;
    version
----------------
 20250507013646
(1 row)

```

Событий календаря очень много!!! 69 724 384!

```plaintext
discourse=# select count(*) from calendar_events;
  count
----------
 69724384
(1 row)

```

Так что, похоже, это и есть проблема.

… но на исходном сайте плагин discourse\_calendar даже не установлен!?

Но в таблице calendar\_events на исходном сайте как раз такое количество событий…

Но в post\_custom\_fields есть только 4 записи, связанные с событием календаря?.

Так что есть много событий, не привязанных к теме или посту. Обычные праздники, такие как Рождество, Новый год, День подарков.

### Вот решение

```plaintext
delete from calendar_events where topic_id=0 and post_id is null and post_number is null;

```

После этого осталось 99 событий.

Может быть, SiteSetting.delete\_expired\_event\_posts\_after был установлен в 0, и хотя плагин толком не использовался, он создал все эти события?

И да! `SiteSetting.delete_expired_event_posts_after` установлен в `-1`.

О, но -1 — это значение по умолчанию. Так что, возможно, это и есть проблема?

Нет. Это касается **ПОСТОВ** событий. Я не совсем понимаю, откуда взялось 70 миллионов событий.

```plaintext
https://github.com/discourse/discourse/blob/main/plugins/discourse-calendar/config/settings.yml#L11-L13

```

---

_[View the full topic](https://meta.discourse.org/t/restore-fails-due-to-disk-space-on-migration-because-of-70m-calendar-events/395584)._
