Tüm düğümleri sildikten sonra, düğüm kimliğini tekrar 1'den başlayacak şekilde nasıl sıfırlarım?


17

Test için tonlarca sahte içerik oluşturdum ve hepsini sildim. Nid otomatik olarak arttığından, yeni oluşturulan düğümün son oluşturulan nid +1 nid değeri olacaktır.

Nid'i tekrar 1'den nasıl başlatabilirim?


6
Soru, neden bunu yapmak isteyesiniz. Nid'in ne kullanıldığı gerçekten önemli değil ve yine de her zaman kesinlikle ardışık olduğuna dair bir garanti yok.
Berdir

3
Berdir ile hemfikirim; hiçbir modül, ilk düğümün 1'e eşit olduğu gerçeğine güvenmemelidir. Bu, kullanıcıların kullanıcı kimliğine benzer: her zaman Drupal'dan oluşturulan 0 ve 1'e eşit olan kimliğe sahip kullanıcının varlığına güvenebilirsiniz. yükleme sırasında, ancak kimliği 3'e eşit olan bir kullanıcı hesabının varlığına güvenmemelisiniz. Diğer modüller anonim kullanıcının veya süper kullanıcının hesabını silebilir, ancak bu tür modüllerin bir hatası olarak kabul edilmelidir.
kiamlaluno

Yanıtlar:


13

Plase, düğüm tablosunu bu şekilde kesmez, düğüm tablosuna bağlı olan node_revisions, sekanslar, alan tabloları, sınıflandırma tabloları ve daha pek çok başka tablo vardır.

Bunu yapmanın güvenli bir yolu yoktur, gerçekten sitenize bağlıdır, sıralar tablosu da dahil olmak üzere bir nid içeren tüm tabloları kısaltmanız ve ayarlamanız gerekir. Unutmayın, sitenizin kullanılamaz hale gelme olasılığı yüksektir, bu yüzden önce yedek olmadan başlamayın.


1
Tüm düğümler silindiğinde, düğümlere başvurular içeren diğer tabloların da boş olması beklenir. Hiçbir modülün ilk düğümün kimliğinin 1'e eşit olduğu gerçeğine güvenmemesi gerektiğini söyledi.
kiamlaluno

16
ALTER TABLE `node` AUTO_INCREMENT = 1;

Not - Bu soruya cevap veren diğerleri: İçeriği sildikten sonra küçük bir kontrol yaptım ve ilişkili içerik gerçekten silindi, node_revisions ve field_ * tabloları boş. node_delete aynısını söylüyor - http://api.drupal.org/api/drupal/modules--node--node.module/function/node_delete_multiple/7

Bazen diğer platformlardan (ör. ASP + MSSQL) geçiş yaptığınızda taşıma projelerinde, bazen çok sayıda faktör nedeniyle nid'i sıfırlamak kaçınılmaz olur. Önlenebilir eminim ama zaman / kod tradeoff her zaman orada.


Aylar süren muazzam bir göç projesinden geçiyorum. Geliştirme ve test için kullandığım siteye, buraya ve oraya eklenen bazı yeni düğümler eklenmiştir. Tüm düğümleri ve yorumları geri almanız ve her ikisi için AUTO_INCREMENT = 1 ayarlamanız gerektiğini düşünüyorum. Bunu göçler için yapan herhangi birinin, özellikle Drupal 7 için başka sorunlarla karşılaşıp karşılaşmadığını merak ediyorum.
Webdrips

2

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

Bunu yapmadan önce tüm düğümleri sildiğinizden emin olun.


2

Tümünü sil modülünü aşağıdaki drush komutlarıyla kullanabilirsiniz:

Drupal 7

Her türden düğümü silin ve düğüm, revizyon ve yorum sayaçlarını sıfırlayın.

drush delete-all --reset

Drupal 8

buraya bakın

Her türden tüm içeriği siler.

drush delete-all-delete-content

Ve sonra:

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;

0

düğüm tablosunu kesebilirsiniz, ancak ilişkisel alan tablosunu kesmeniz gerekir, eğer sadece kullanabileceğiniz 1'den artış kimliğini başlatmak istiyorsanız

ALTER TABLE  `node` AUTO_INCREMENT=1

Düğüm tablosunun kesilmesi, düğüm silme işleminde çalışması gereken tüm kancaları yok sayar, bu akıllıca bir fikir değildir. Örneğin, verileri revizyonlar tablosunda bırakır ve Drupal, revizyon oluşturmaya çalışırken zaten kullanılan nid'e çarptığında kilitlenir.
Mołot

@ Düğüm ve revizyon düğümü tablosunu keserseniz herhangi bir sorun yaşamazsınız. Test ediyorum ve sorunum yok
shahab

Özel kurulumunuzda bu yöntemin başarılı olması, her zaman işe yarayacağını kanıtlamaz.
Mołot
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.