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?

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ó.


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';

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);
}

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);

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).
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.