Exclua as entradas e referências FAL duplicadas após a atualização do TYPO3 6.2

Pode acontecer que você tenha executado o assistente de migração FAL para imagens duas vezes durante a atualização do TYPO3 4.5 para o 6.2. Nesse caso, você acaba com cada imagem existindo duas vezes no mesmo elemento de conteúdo.

Aqui está como limpamos isso:

# Add temporary "deleted" field to sys_file
ALTER TABLE sys_file ADD deleted tinyint
(4) NOT NULL DEFAULT '0';

# Create a copy of the table
CREATE TABLE sys_file_copy LIKE sys_file
;
INSERT sys_file_copy SELECT
* FROM sys_file;

# Update "sys_file" (see below)
UPDATE sys_file SET deleted
=1
WHERE deleted
=0 AND uid NOT IN (
SELECT MAX
(uid) AS uid
FROM sys_file_copy

WHERE deleted
=0
GROUP BY BINARY identifier

);

# Clean up in "sys_file_reference" table after "sys_file" update
UPDATE sys_file_reference SET deleted
=1
WHERE deleted
=0 AND uid_local IN (
SELECT uid FROM sys_file

WHERE deleted
=1
);

# Create a copy of the table
CREATE TABLE sys_file_reference_copy LIKE sys_file_reference
;
INSERT sys_file_reference_copy SELECT
* FROM sys_file_reference;

# Update sys_file_reference (see below)
UPDATE sys_file_reference SET deleted
=1
WHERE deleted
=0 AND uid NOT IN (
SELECT MAX
(uid) AS uid
FROM sys_file_reference_copy

WHERE deleted
=0
GROUP BY pid
,uid_local,uid_foreign,tablenames,fieldname
);

# Verify the result before you delete the data!

# Delete and clean up
DELETE FROM sys_file_reference WHERE deleted
=1;
DELETE FROM sys_file WHERE deleted
=1;
ALTER TABLE sys_file DROP deleted
;
DROP TABLE sys_file_reference_copy
;
DROP TABLE sys_file_copy
;

Explicação das consultas de atualização:

Atualizar tabela sys_file

  • selecione registros com o mesmo identificador
  • usando o modo binário para que a pesquisa diferencia maiúsculas de minúsculas
  • manter os resultados com maior uid
  • marque o resto como excluído

Atualizar tabela de referência de arquivo sys

  • selecione registros com o mesmo pid, uid local, uid estrangeiro, tablenames, fieldname
  • mantenha os resultados com o maior uid
  • marque o resto como excluído