Después de eliminar todos los nodos, ¿cómo restablezco la ID del nodo para que comience desde 1 nuevamente?

17

Generé toneladas de contenido ficticio para probar y luego las eliminé todas. Como nid es un incremento automático, el nodo recién creado tendrá un nid del último nid creado +1.

¿Cómo puedo hacer que nid comience desde 1 nuevamente?

gilzero
fuente
66
La pregunta es, ¿por qué querría hacer eso? Realmente no importa qué nid se use, y no hay garantía de que siempre sea estrictamente secuencial de todos modos.
Berdir
3
Estoy de acuerdo con Berdir; ningún módulo debe confiar en el hecho de que el primer nodo tiene una ID igual a 1. Esto es similar a la ID de usuario de los usuarios: puede confiar en la presencia de un usuario con ID igual a 0 y a 1, que siempre se crean desde Drupal durante la instalación, pero no debe confiar en la presencia de una cuenta de usuario con ID igual a 3. Otros módulos podrían eliminar la cuenta del usuario anónimo o el superusuario, pero eso debería considerarse un error de dichos módulos.
kiamlaluno

Respuestas:

13

Plase no trunca la tabla de nodos de esa manera, hay algunas otras tablas conectadas a la tabla de nodos, como node_revisions, secuencias, tablas de campos, tablas de taxonomía y muchas más.

No hay una forma segura de hacerlo, realmente depende de su sitio, tendrá que truncar y ajustar todas las tablas que tengan un nid, incluida la tabla de secuencias. Recuerde, es muy probable que su sitio quede inutilizable, así que no comience sin una copia de seguridad primero.

Luis
fuente
1
Esperaría que otras tablas que contienen referencias a nodos también estén vacías, cuando se eliminen todos los nodos. Dicho esto, no hay ningún módulo debe confiar en el hecho el primer nodo tiene ID igual a 1.
kiamlaluno
16
ALTER TABLE `node` AUTO_INCREMENT = 1;

PD: otros que han respondido a esta pregunta: acabo de hacer una pequeña comprobación después de eliminar el contenido y el contenido asociado se elimina de hecho, node_revisions y field_ * tables están vacías. node_delete dice lo mismo: http://api.drupal.org/api/drupal/modules--node--node.module/function/node_delete_multiple/7

A veces, en proyectos de migraciones cuando migras desde otras plataformas (por ejemplo, ASP + MSSQL), a veces es inevitable restablecer el nid debido a muchos factores. Estoy seguro de que podría evitarse, pero el intercambio de tiempo / código siempre está ahí.

Dipen
fuente
He pasado por un proyecto de migración masiva que ha estado tomando meses. El sitio que he estado utilizando para el desarrollo y las pruebas ha agregado algunos nodos nuevos aquí y allá, que contienen parte del contenido más reciente. Estoy pensando que necesitaría revertir todos los nodos y comentarios, y establecer AUTO_INCREMENT = 1 para ambos. Me pregunto si alguien que ha hecho esto para las migraciones se ha encontrado con otros problemas, especialmente para Drupal 7.
Webdrips
2

Consulta SQL: ALTER TABLE 'node' AUTO_INCREMENT=1;

Asegúrese de haber eliminado todos los nodos antes de hacer esto.

beeleg
fuente
2

Puede usar el módulo Eliminar todo con los siguientes comandos drush:

Drupal 7

Elimine nodos de todos los tipos y restablezca los contadores de nodos, revisiones y comentarios.

drush delete-all --reset

Drupal 8

mira aquí

Elimina todo el contenido de todos los tipos.

drush delete-all-delete-content

Y entonces:

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;
Schneidolf
fuente
0

puede truncar la tabla de nodos pero, tenga en cuenta que debe truncar la tabla de campos relacionales, si solo desea iniciar la identificación de incremento desde 1, puede usar

ALTER TABLE  `node` AUTO_INCREMENT=1
Shahab
fuente
Truncar la tabla de nodos ignorará todos los ganchos que deberían activarse al eliminar el nodo, por lo que no es una buena idea. Por ejemplo, dejará datos en la tabla de revisiones, y Drupal se bloqueará cuando llegue al nid ya usado que intenta crear una revisión.
Mołot
@ Mołot si trunca el nodo y la tabla de nodos de revisión, no tiene ningún problema. Lo
pruebo
El hecho de que en su configuración específica este método haya tenido éxito no prueba que siempre funcione.
Mołot