J'ai environ 13 000 nœuds à supprimer dans un site Drupal 7. J'ai essayé le module Views Bulk Operations pour supprimer 500 nœuds à la fois, mais il arrive à expiration. Je ne peux supprimer que 50 nœuds à la fois.
Comment puis-je supprimer plus de 50 nœuds à la fois?
Réponses:
VBO est la norme de facto pour les nœuds de suppression en masse, il n'y a tout simplement pas de meilleure façon de le faire.
Comme VBO traite en lots, il ne fait que 1 (ou peut-être quelques) nœuds à la fois. Donc, si vous recevez des erreurs de dépassement de délai, celles-ci sont liées à la suppression d'un seul nœud, et non à l'ensemble de l'opération par lots.
La résolution standard de quelque chose comme ça est d' augmenter le temps d'exécution max PHP pour compenser.
la source
Installez Devel. Ensuite, allez dans admin / config / development / generate / content dans D7 et sélectionnez tous les types de contenu. Cochez "Supprimer tout le contenu". Entrez 0 dans "Combien de nœuds souhaitez-vous générer?"
Cliquez sur Générer.
Cela supprimera tous les nœuds.
la source
generate-content
(genc
) fournie avec Devel Generate;drush help genc
pour des informations d'utilisation.Utilisez un VBO et exécutez-le depuis Drush. J'ai utilisé la méthode suivante pour supprimer plus de 1,5 million de nœuds après les tests d'échelle.
drush vbo-execute my_view action :: views_bulk_operations_delete_item
Où, my_view est le nom de la machine de votre vue
Vous pouvez également utiliser drush vbo-list pour afficher toutes les vues disponibles et leurs opérations en bloc.
Le VBO devrait maintenant fonctionner dans le shell, vous donnant des commentaires au fur et à mesure.
la source
Il existe un module Supprimer tout . Il supprimera tous les nœuds et / ou utilisateurs du site.
Il prend également en charge Drush:
Exemples:
la source
node_delete()
(il ne prend même pas la peine d'être utilisénode_delete_multiple()
). Plus inquiétant encore, il dispose d'une option qui supprime les données directement des tables de base de données sans utiliser l'API de champ et sans utiliser de hooks. Aucun travail par lots, il s'exécute jusqu'à la fin du script. Module très dangereux à mon humble avis.drush delete-all article
pour supprimer des articles, j'opterais pour cette solution.Utilisez Views Bulk Operations - c'était une bonne idée. Mais au lieu d'appeler directement l'opération, utilisez l'api par lots. Ici vous pouvez lire un article à ce sujet. Le manque de documentation sur cette partie était un problème connu .
la source
Pour supprimer des nœuds en grand nombre (c'est-à-dire en vrac) comme dans votre cas, vous pouvez également utiliser le module de suppression en bloc pour cela.
Cela utilisera l'API Batch pour supprimer les nœuds afin d'éviter les problèmes de dépassement de délai ou de mémoire lors de la suppression de milliers de nœuds avec un seul appel à node_delete_multiple ().
En dehors de cela, vous pouvez même essayer Supprimer tout le module pour supprimer tous les nœuds d'un type de contenu.
J'espère que cela t'aides.
la source
Vous pouvez également créer un processus par lots à l'aide de l'API BATCH et dans ce processus par lots, faites simplement
C'est ça. Vous avez terminé ici. Si vous souhaitez lui créer une commande drush, vous pouvez également la créer. Pour référence, veuillez regarder ceci .
la source
Si vous avez des raisons de le faire par code:
Vous avez également de nombreuses autres méthodes disponibles pour sélectionner les nœuds à supprimer.
la source
Vous pouvez suivre les conseils de Bobik et nourrir cela comme l'argument d'un `` phush-eval drush '' si vous êtes vraiment dans un pincement, mais je m'attends à ce que les performances soient similaires à celles du VBO, tout en étant légèrement plus rapides. Si les performances sont vraiment lentes, vous souhaiterez peut-être voir quels modules appellent hook_node_delete en saluant la base de code pour '_node_delete (' et en déterminant ensuite si vous pouvez désactiver certains des modules qui utilisent ce hook.
la source