Após excluir todos os nós, como redefinir o ID do nó para iniciar novamente a partir de 1?

17

Gerei toneladas de conteúdo fictício para teste e, em seguida, apaguei todos eles. Como o nid é incrementado automaticamente, o nó recém-criado terá um nid do último nid criado +1.

Como posso fazer o nid iniciar de 1 novamente?

Gilzero
fonte
6
A questão é: por que querer fazer isso? Realmente não importa qual nid é usado, e não há garantia de que seja sempre estritamente sequencial.
Berdir 19/03/11
3
Eu concordo com Berdir; nenhum módulo deve confiar no fato de o primeiro nó ter um ID igual a 1. Isso é semelhante ao ID do usuário: você pode confiar na presença de um usuário com um ID igual a 0 e a 1, sempre criados a partir do Drupal durante a instalação, mas você não deve confiar na presença de uma conta de usuário com ID igual a 3. Outros módulos podem excluir a conta do usuário anônimo ou do superusuário, mas isso deve ser considerado um bug desses módulos.
kiamlaluno

Respostas:

13

Por favor, não trunque a tabela de nós assim, existem outras tabelas conectadas à tabela de nós, como node_revisions, sequências, tabelas de campos, tabelas de taxonomia e muito mais.

Não há uma maneira segura de fazer isso, isso realmente depende do seu site, você terá que truncar e ajustar todas as tabelas que possuem um nid, incluindo a tabela de seqüências. Lembre-se de que é altamente provável que seu site se torne inutilizável; portanto, não inicie sem um backup primeiro.

Luis
fonte
1
Eu esperaria que outras tabelas que contêm referências a nós também estivessem vazias, quando todos os nós forem excluídos. Disse que, nenhum módulo deve confiar no fato do primeiro nó tem ID igual a 1.
kiamlaluno
16
ALTER TABLE `node` AUTO_INCREMENT = 1;

PS - Outros que responderam a esta pergunta: Acabei de fazer uma pequena verificação após a exclusão do conteúdo e o conteúdo associado é realmente excluído, as tabelas node_revisions e field_ * estão vazias. node_delete diz o mesmo - http://api.drupal.org/api/drupal/modules--node--node.module/function/node_delete_multiple/7

Às vezes, nos projetos de migração, quando você migra de outras plataformas (por exemplo, ASP + MSSQL), às vezes torna-se inevitável redefinir o nid devido a vários fatores. Estou certo de que isso poderia ser evitado, mas a troca de tempo / código está sempre lá.

Dipen
fonte
Eu estou passando por um grande projeto de migração que leva meses. O site que eu tenho usado para desenvolvimento e teste teve alguns novos nós adicionados aqui e ali, que hospedam parte do conteúdo mais recente. Acho que você precisaria reverter todos os nós e comentários e definir o AUTO_INCREMENT = 1 para ambos. Gostaria de saber se alguém que fez isso para migrações se deparou com outros problemas, principalmente no Drupal 7?
Webdrips
2

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

Certifique-se de ter excluído todos os nós antes de fazer isso.

beeleg
fonte
2

Você pode usar o módulo Delete all com os seguintes comandos drush:

Drupal 7

Exclua nós de todos os tipos e redefina os contadores de nós, revisões e comentários.

drush delete-all --reset

Drupal 8

Veja aqui

Exclui todo o conteúdo de todos os tipos.

drush delete-all-delete-content

E depois:

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
fonte
0

você pode truncar a tabela de nós, mas preste atenção, você deve truncar a tabela de campos relacionais; se você deseja iniciar o ID de incremento a partir de 1, pode usar

ALTER TABLE  `node` AUTO_INCREMENT=1
shahab
fonte
A tabela de nós truncados ignorará todos os ganchos que devem ser acionados na exclusão do nó, portanto, não é uma boa idéia. Por exemplo, ele deixará os dados na tabela de revisões e o Drupal falhará quando atingir o nid já usado tentando criar a revisão.
Mołot
@ Mołot, se você truncar o nó e a tabela do nó de revisão, não terá nenhum problema. Eu testá-lo e não tem problema
Shahab
O fato de que na sua configuração específica esse método foi bem-sucedido não prova que sempre funcionará.
Mołot 01/10