Drupal - How do I clear or delete a queue?
drush
has no option to clear queues, there is just drush queue-list
and drush queue-run
. However, you can use it to delete the corresponding queue records from the database:
Use
drush queue-list
to find out the name of the queue you want to clear. In my case, it ismessage_subscribe
.Use a command like this, replacing with your queue's name accordingly:
drush sqlq "DELETE FROM queue WHERE name='message_subscribe'"
Confirm with
drush queue-list
that the queue in question now has zero items in it.
This solution is quite similar to @batigolix's, just that it clears a specific queue instead of all queues.
Careful. Like @batigolix said, take care not to lose data! This solution might not be for a production environment …
There's no built-in management UI for queues in Drupal but if you're looking for a one check out the Queue UI module.
To delete a queue in your code use $queue->deleteQueue();
Yes, you can delete or clear a queue in the database by emptying the queue table.
Drush allows you to do that easily with drush sqlq "TRUNCATE queue"
.
Careful. I tried this in a local development environment. It may not be recommended in production.
Emptying the entire queue
table is not always a good idea as it contains items from queues created by other modules as well. So, a cleaner way is to remove items from a particular queue.
- First, inspect the queues which exist in the
queue
table by browsing the table usingmysql
orphpmyadmin
. To get all queue names with some items in the queue, you can doSELECT DISTINCT name FROM queue
. - Second, once you've decided upon the queue you want to empty, remove items only for that queue using
DELETE FROM queue WHERE name = :name
. Replace `:name: with the name of the queue you found in the first step.
I've used this on production, but you should be careful and use your judgement. In short, best thing is to not delete stuff from other module's queue or queues you don't know the purpose of.