Como posso excluir todas as revisões de nó / campo?

17

Eu tenho um drupal 7 sites, onde ele mantém revisões de nós e de campo. Eu mantenho revisões para o caso em que, por engano, uma nova versão defeituosa é salva e quero reverter.

Mas agora eu quero limpar e otimizar o banco de dados para ocupar menos espaço no disco rígido.

Quais são alguns métodos para excluir todas as revisões, exceto a atual, para todos os nós / campos do site?

John
fonte

Respostas:

13

Use o módulo Exclusão de Revisão do para excluir e gerenciar suas revisões. (Eu sou o mantenedor do módulo.)

O módulo Exclusão de Revisão do Nó permite gerenciar as revisões do Nó de acordo com sua escolha. Ele ajuda a manter o número específico de revisões para o nó. Este módulo fornece a flexibilidade para aplicar a exclusão de revisão para o tipo de conteúdo específico e executá-lo no horário específico. Você pode gerenciar suas configurações na página de administração Excluir exclusão de revisão de nó.

Kaushal Kishore
fonte
Você pode excluir revisões de campo com a Exclusão de revisão de nó? Não estou vendo nenhuma opção para fazê-lo com este módulo
BlondeSwan
15

Ainda não há uma versão estável para exclusão da revisão, mas uma porta D7 está a caminho (não tenho certeza se está funcionando).

Nesse tópico, alguém sugeriu usar o VBO para isolar as revisões e excluí-las.

Se você se sentir confortável com a API, faça um loop por todos os seus nós, recupere as revisões node_revision_list()e exclua-as usando node_revision_delete().

Como último recurso, e se você gosta de mexer com o banco de dados ( como eu ), você pode excluir as linhas field_revision_*e as revisões das revisões node_revision. Tente o seguinte:

AVISO: não foi testado!

DELETE FROM field_revision_body
WHERE NOT EXISTS (
  SELECT NULL
  FROM node
  WHERE vid = revision_id
);

DELETE FROM node_revision
WHERE NOT EXISTS (
  SELECT NULL
  FROM node
  WHERE node.vid = node_revision.vid
);

Você pode encontrar a lista completa das tabelas de suas revisões no information_schemabanco de dados:

SELECT DISTINCT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME LIKE 'field_revision%'
AND TABLE_SCHEMA = 'your_database';
tostinni
fonte
3
O módulo de Exclusão de Revisão do Nó agora tem uma versão estável.
Free Radical
Testando isso, acredito que a condição na consulta node_revision deva ser WHERE node.vid = node_revision.vid. Erros como estão. Talvez também especifique as tabelas na consulta field_revision_body?
digitgopher
O módulo Exclusão de revisão mencionado nesta resposta recomenda o uso da Exclusão de revisão de nó, pois não precisamos de 5 módulos fazendo a mesma coisa. Veja a resposta aceita.
mbomb007 3/07
2

Na mesma situação, usei o código abaixo:

foreach (node_load_multiple($nids) as $node) {
  // Delete sub revisions.
  foreach (node_revision_list($node) as $vid => $revision) {
    node_revision_delete($vid);
  }
  // Delete archived revisions.
  revisioning_delete_archived_revisions($node);
}
mrded
fonte
1

Eu fiz isso para o pessoal da VBO (execute PHP arbitrário), ele excluirá todas as revisões (exceto as atuais). Isso depende da ordem de classificação incorporada node_revision_list(); portanto , faça backup do seu banco de dados e teste os resultados desejados antes de usar os dados ativos .

  krumo($entity);

  $revision_array = node_revision_list($entity);  
  $revision_array_ASC = array_reverse($revision_array, TRUE);
  krumo($revision_array_ASC);
  krumo(count($revision_array_ASC));

  foreach ($revision_array_ASC as $vid => $node) {
    $count = count($revision_array_ASC);
    if ($count > 1) {
          node_revision_delete($vid);
    }
  }

  $revision_array = node_revision_list($entity);  
  krumo($revision_array);
Merrick
fonte
Parece que você está tendo um grande problema para evitar a exclusão da revisão atual (classificação, contagem). Mas node_revision_delete já impede a exclusão da revisão atual.
Dxvargas 17/04/2015
0

O módulo de Exclusão de Revisão do Nó agora tem uma versão estável.

O módulo Exclusão de revisão de nó permite rastrear e remover revisões antigas de tipos de conteúdo. Recursos:

  • Defina a quantidade máxima de revisões a serem mantidas por tipo de conteúdo.
  • Execute Drush, cron ou em um período diferente (diariamente, semanalmente, etc).
Juampy NR
fonte