TYPO3:删除具有大量记录的页面

时间:2018-12-06 05:55:15

标签: typo3

我无法通过TYPO3后端删除页面。这很可能是因为它包含大量存储在其上的记录。例如,该页面上存储了几乎一半的sys_file_reference。 是否可以通过CLI删除TYPO3页面?

3 个答案:

答案 0 :(得分:1)

我不知道如何删除CLI。

在这种情况下,我会通过手动DB交互来帮助TYPO3,因为我认为无法手动删除此引用。

set deleted= 1sys_file_referencestablenames上选择的表fieldname上进行更新(= uid_foreign)(或真正删除)。如果该表中的记录包含sys_file_references,则必须使用联接构建一个更大的查询。

您也可以尝试疯狂:
只需“删除”(= {set deleted= 1)页面或带有数据库查询中的引用的记录,并清除调度程序任务。

照常:
以这种方式使用记录之前,请执行数据库备份。


  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???)
    从后端删除

[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???)
                        )

答案 1 :(得分:1)

在这种情况下,我将编写一个CommandController,它使用DataHandler-期望一个参数(页面的ID)并删除该页面。然后,您可以通过CLI调用CommandController。并查看sys_log表中的新记录。 DataHandler的delete命令触发所有子页面,内容元素和文件引用的删除(希望还有版本控制-尚未测试这种情况)。在调用命令之前进行数据库备份。删除所有内容可能要花很长时间。

答案 2 :(得分:0)

您可能会发现https://github.com/NamelessCoder/asynchronous_reference_indexing有用-这是我创建的一个小包,它委派了引用的索引编制,当您删除页面和sys_file_references时会发生这种情况,因此不会在同一请求中发生。

虽然不能真正解决问题,但通常可以使执行删除请求所需的时间低于服务器允许的阈值。