すべてのノードを削除した後、ノードIDをリセットして再度1から開始するにはどうすればよいですか?


17

テスト用に大量のダミーコンテンツを生成し、それらをすべて削除しました。nidは自動インクリメントなので、新しく作成されたノードには、最後に作成されたnid +1のnidがあります。

nidを再び1から開始するにはどうすればよいですか?


6
問題は、なぜそうするのかということです。どのnidが使用されているかは実際には問題ではなく、いずれにしても常に厳密にシーケンシャルであるという保証はありません。
ベルディール

3
Berdirに同意します。最初のノードのIDが1であるという事実に依存するモジュールはありません。これはユーザーのユーザーIDと同様です。IDが0および1で、常にDrupalから作成されるユーザーの存在に依存できます。他のモジュールは匿名ユーザーまたはスーパーユーザーのアカウントを削除できますが、それはそのようなモジュールのバグと見なされるべきです。
キアムルノ

回答:


13

そのようにノードテーブルを切り捨てないでください。node_revisions、シーケンス、フィールドテーブル、分類テーブルなど、ノードテーブルに接続された他のテーブルがいくつかあります。

これを行う安全な方法はありません。それは本当にあなたのサイトに依存します。シーケンステーブルを含むnidを持つすべてのテーブルを切り詰めて調整する必要があります。サイトが使用できなくなる可能性が非常に高いことを忘れないでください。最初にバックアップなしで開始しないでください。


1
すべてのノードが削除されると、ノードへの参照を含む他のテーブルも空になるはずです。それを、前記最初のノードがIDを有するという事実に頼るべきでないモジュールが1に等しくない
kiamlaluno

16
ALTER TABLE `node` AUTO_INCREMENT = 1;

PS-この質問に答えた他の人:コンテンツを削除した後、ちょっとチェックをしただけで、関連するコンテンツは実際に削除されました。node_revisionsとfield_ *テーブルは空です。node_deleteが同じと言う- http://api.drupal.org/api/drupal/modules--node--node.module/function/node_delete_multiple/7

他のプラットフォーム(ASP + MSSQLなど)から移行するときの移行プロジェクトでは、多くの要因によりnidをリセットすることが避けられないことがあります。回避できると確信していますが、時間とコードのトレードオフは常に存在します。


私は何ヶ月もかかっている大規模な移行プロジェクトを行ってきました。私が開発とテストに使用してきたサイトには、新しいノードがいくつか追加されており、最近のコンテンツの一部になっています。すべてのノードとコメントをロールバックし、両方にAUTO_INCREMENT = 1を設定する必要があると思います。移行のためにこれを行った人が、特にDrupal 7で他の問題に遭遇したのではないかと思っています。
Webdrips

2

SQLクエリ: ALTER TABLE 'node' AUTO_INCREMENT=1;

これを行う前に、すべてのノードを削除したことを確認してください。


2

次のブラシコマンドで[すべて削除]モジュール使用できます。

Drupal 7

すべてのタイプのノードを削除し、ノード、リビジョン、コメントカウンターをリセットします。

drush delete-all --reset

Drupal 8

こちらをご覧ください

すべてのタイプのすべてのコンテンツを削除します。

drush delete-all-delete-content

その後:

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

ノードテーブルを切り捨てることはできますが、リレーショナルフィールドテーブルを切り捨てる必要があることに注意してください。

ALTER TABLE  `node` AUTO_INCREMENT=1

ノードテーブルの切り捨ては、ノードの削除時に発生するすべてのフックを無視するため、賢明な考えではありません。たとえば、リビジョンテーブルにデータを残し、リビジョンを作成しようとして既に使用されているnidにヒットすると、Drupalはクラッシュします。
モウォ14年

@Mołotノードとリビジョンノードテーブルを切り捨てても問題はありません。私はそれをテストし、問題を持っていない
シャハブ

特定のセットアップでこのメソッドが成功したという事実は、常に機能することを証明するものではありません。
モウォ14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.