Вопрос

Удаление записей в таблице вне лимита в 20 тыс записей

Как сделать удаление всех записей(2 млн) не упираясь в ошибку лимит в 20 тыс записей?

может есть у кого-то скрипт или решение?

Нравится

2 комментария

Если использовать пользовательский инструмент, то очистку можно сделать через:

  1. Консоль SQL запросов (https://marketplace.terrasoft.ru/app/sql-executor-creatio), но тут опасно, так как если записи имеют связи с другими объектами, то потом будут ошибки в системе. Это можно делать только если вы чистите какие-то логи с текстовыми записями. Боюсь, что предоставив вам скрипт - вы еще испортите себе систему. Поэтому пока не буду.

  2. Удаляя через раздел устанавливая - фильтр по какому-то условию не более 20 000 записей, например, по дате создания записи — это безопасно. Минусы в таком подходе в том, что надо постоянно менять фильтр и это долго для 20 000. Плюсы в безопасном удалении со связными записями

  3. Настроить БП с циклом удаления, который сам будет устанавливать условие фильтра, например, по дате создания, подбирая даты так, чтоб не превышать 20 000, но при этом будет обходить связи с другими разделами. Минусы такого подхода в том, что цикл удаляет долго и только записи без связей, потом все равно нужно удалять записи через раздел по связным записям. Плюсы в том, что процесс можно оставить на ночь и он безопасно отработает все записи без связей. Выглядеть такой БП может вот так:

 

В моем примере, я удаляю контакты обходя возможные связи с другими разделами, где:

  1. нахожу дату первой созданной записи контакта и записываю эту дату в созданный заранее параметр "Первая дата".
  2. Потом эту же дату я добавляю в параметр "Последняя дата"
  3. Далее по тем же условиям связей, но уже добавив первую и последнюю дату я считаю сколько контактов получается между датами (Подсчитать количество контактов)
  4. Если контактов меньше 5000, то я добавляю +1 день к последней дате и опять выполняю подсчет (поток <5000)
  5. Если контактов больше 5000, то происходит удаление записей
  6. Цикл запускается по кругу.
  7. Перед условием добавления +1 дня я добавляю проверку на общее количество контактов (всего контактов), чтоб в случае меньше 20 000 отправить в удаление все возможные записи
  8. По окончании удаления всех возможных контактов без связей удаляю контакты уже вручную через раздел, как описано в пункте 2 в начале моего сообщения.

Вы бы уточнили сразу какие записи будете удалять — было бы легче ответить на ваш вопрос

Показать все комментарии