TYPO3: удаление страницы с огромным количеством записей - PullRequest
0 голосов
/ 06 декабря 2018

У меня проблемы с удалением страницы через бэкэнд TYPO3.Скорее всего, потому что он содержит огромное количество записей, хранящихся на нем.Например, на этой странице хранится почти полмиллиона sys_file_reference.Можно ли удалить страницу TYPO3 через CLI или около того?

Ответы [ 3 ]

0 голосов
/ 06 декабря 2018

В этом случае я бы написал CommandController, который использует DataHandler - ожидание одного параметра (идентификатора страницы) и удаление страницы.Затем вы можете вызвать CommandController через CLI.И смотреть новые записи в таблице sys_log.Команда удаления из DataHandler запускает удаление всех подстраниц, элементов содержимого и ссылок на файлы (и, надеюсь, также версий - еще не проверял этот случай).Сделайте резервную копию базы данных перед вызовом команды.И это может занять довольно много времени, пока все не будет удалено.

0 голосов
/ 06 декабря 2018

Вы можете найти https://github.com/NamelessCoder/asynchronous_reference_indexing полезным - это небольшой пакет, который я создал, который делегирует индексацию ссылок, что происходит при удалении страниц и sys_file_references, поэтому в одном запросе это не происходит.

Хотя это не решает проблему по-настоящему, обычно она может принести время, необходимое для выполнения запроса на удаление, ниже того порогового значения, которое позволяет ваш сервер.

0 голосов
/ 06 декабря 2018

Я не знаю, как удалить CLI.

Я бы помог TYPO3 в случае ручного взаимодействия с БД, поскольку я предполагаю, что ручное удаление этих ссылок вручную невозможно.

Сделайте обновление (= set deleted= 1) (или реальное удаление) в таблице sys_file_references, где вы выбираете tablenames, fieldname и uid_foreign.В случае записей в этой таблице, которые содержат sys_file_references, вы должны создать более крупный запрос с объединениями.

Вы также можете попробовать выйти из строя:
просто «удалить» (= set deleted= 1) страницуили записи со ссылками в DB-запросе и очистка задачи планировщика.

как обычно:
перед тем, как работать с записями, сделайте резервную копию БД.


  1. определите записи
    select uid from ???table??? where pid in (???page-uid-list???)
  2. определить sys_file_references:
    select * from sys_file_references where tablenames=???table??? and uid_foreign in ( "first select" )
  3. обновить / удалить эти идентифицированные записи
    update sys_file_references set deleted=0 where tablenames=???table??? and uid_foreign in ( "first select" ) /
    delete from sys_file_references where tablenames=???table??? and uid_foreign in ( "first select" ) [1]
  4. удалить эти записи (из 1) в случае больших чисел (в противном случае использовать BackEnd)
    update ???table??? set deleted=1 where pid in (???page-uid-list???) /
    delete from ???table??? where pid in (???page-uid-list???)
  5. удалить эти страницы
    update pages set deleted=1 where uid in (???page-uid-list???) / delete from pages where uid in (???page-uid-list???)
    или удалить из BackEnd

[1]

UPDATE sys_file_references 
   SET deleted=0 
   WHERE tablenames=???table??? 
     AND uid_foreign IN (SELECT uid 
                           FROM ???table??? 
                          WHERE pid IN (???page-uid-list???)
                        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...