Après avoir supprimé tous les nœuds, comment réinitialiser l'ID de nœud pour recommencer à partir de 1?
17
J'ai généré des tonnes de contenu factice pour les tests, puis les ai tous supprimés. Comme nid est auto-incrémenté, le nœud nouvellement créé aura un nid du dernier nid +1 créé.
La question est de savoir pourquoi voudrait faire cela. Peu importe le nid utilisé, et il n'y a aucune garantie qu'il soit toujours strictement séquentiel de toute façon.
Berdir
3
Je suis d'accord avec Berdir; aucun module ne doit s'appuyer sur le fait que le premier nœud a un ID égal à 1. Ceci est similaire à l'ID utilisateur des utilisateurs: vous pouvez compter sur la présence d'un utilisateur avec un ID égal à 0 et à 1, qui sont toujours créés à partir de Drupal lors de l'installation, mais vous ne devez pas compter sur la présence d'un compte utilisateur avec un ID égal à 3. D'autres modules pourraient supprimer le compte de l'utilisateur anonyme ou du super-utilisateur, mais cela devrait être considéré comme un bug de ces modules.
kiamlaluno
Réponses:
13
Plase ne tronque pas la table de nœuds comme ça, il y a d'autres tables connectées à la table de nœuds, comme node_revisions, séquences, tables de champs, tables de taxonomie, et bien d'autres.
Il n'y a aucun moyen sûr de le faire, cela dépend vraiment de votre site, vous devrez tronquer et ajuster toutes les tables qui ont un nid, y compris la table des séquences. N'oubliez pas, il est très probable que votre site devienne inutilisable, alors ne commencez pas sans une sauvegarde en premier.
Je m'attendrais à ce que les autres tables contenant des références aux nœuds soient vides également, lorsque tous les nœuds sont supprimés. Dit que, aucun module ne devrait s'appuyer sur le fait que le premier nœud a un ID égal à 1.
Parfois, sur les projets de migration lorsque vous migrez à partir d'autres plates-formes (ex. ASP + MSSQL), il devient parfois inévitable de réinitialiser le nid en raison de nombreux facteurs. Je suis sûr que cela pourrait être évité mais le compromis temps / code est toujours là.
J'ai vécu un projet de migration massif qui prend des mois. Le site que j'ai utilisé pour le développement et les tests a ajouté de nouveaux nœuds ici et là, ce qui arrose une partie du contenu le plus récent. Je pense que vous auriez besoin de restaurer tous les nœuds et commentaires et de définir AUTO_INCREMENT = 1 pour les deux. Je me demande si quelqu'un qui a fait cela pour les migrations a rencontré d'autres problèmes, en particulier pour Drupal 7?
Webdrips
2
Requête SQL: ALTER TABLE 'node' AUTO_INCREMENT=1;
Assurez-vous d'avoir supprimé tous les nœuds avant de procéder.
ALTER TABLE `node` AUTO_INCREMENT=1;
ALTER TABLE `node_revision` AUTO_INCREMENT=1;
ALTER TABLE `node_field_data` AUTO_INCREMENT=1;
ALTER TABLE `node_field_revision` AUTO_INCREMENT=1;
vous pouvez tronquer la table des nœuds mais, faites attention, vous devez tronquer la table des champs relationnels, si vous voulez simplement démarrer l'incrémentation de l'identifiant à partir de 1, vous pouvez utiliser
La troncature de la table des nœuds ignorera tous les crochets qui devraient se déclencher lors de la suppression du nœud, ce n'est donc pas une bonne idée. Par exemple, il laissera les données dans la table des révisions, et Drupal se bloquera lorsqu'il atteindra le nid déjà utilisé essayant de créer la révision.
Mołot
@ Mołot si vous tronquez le nœud et la table des nœuds de révision, vous n'avez aucun problème. Je le teste et je n'ai pas de problème
shahab
Le fait que dans votre configuration spécifique cette méthode ait réussi ne prouve pas qu'elle fonctionnera toujours.
Réponses:
Plase ne tronque pas la table de nœuds comme ça, il y a d'autres tables connectées à la table de nœuds, comme node_revisions, séquences, tables de champs, tables de taxonomie, et bien d'autres.
Il n'y a aucun moyen sûr de le faire, cela dépend vraiment de votre site, vous devrez tronquer et ajuster toutes les tables qui ont un nid, y compris la table des séquences. N'oubliez pas, il est très probable que votre site devienne inutilisable, alors ne commencez pas sans une sauvegarde en premier.
la source
PS - D'autres qui ont répondu à cette question: je viens de faire une petite vérification après la suppression du contenu et le contenu associé est en effet supprimé, les tables node_revisions et field_ * sont vides. node_delete dit la même chose - http://api.drupal.org/api/drupal/modules--node--node.module/function/node_delete_multiple/7
Parfois, sur les projets de migration lorsque vous migrez à partir d'autres plates-formes (ex. ASP + MSSQL), il devient parfois inévitable de réinitialiser le nid en raison de nombreux facteurs. Je suis sûr que cela pourrait être évité mais le compromis temps / code est toujours là.
la source
Requête SQL:
ALTER TABLE 'node' AUTO_INCREMENT=1;
Assurez-vous d'avoir supprimé tous les nœuds avant de procéder.
la source
Vous pouvez utiliser le module Supprimer tout avec les commandes drush suivantes:
Drupal 7
Supprimez les nœuds de tous types et réinitialisez les compteurs de nœuds, de révision et de commentaires.
Drupal 8
vois ici
Supprime tout le contenu de tous les types.
Puis:
la source
vous pouvez tronquer la table des nœuds mais, faites attention, vous devez tronquer la table des champs relationnels, si vous voulez simplement démarrer l'incrémentation de l'identifiant à partir de 1, vous pouvez utiliser
la source