Introducing permanently delete post functionality

When a post is deleted in Discourse, we perform a soft-delete. This means that post is still present in the database in case an administrator wants to recover it later. A soft-delete is not sufficient when the deleted post contains sensitive information and must be pruned from the database completely. For those situations, we are introducing the ability to permanently delete a post.

This feature was implemented under a hidden site setting because of how dangerous it can be, once a post is destroyed it cannot be recovered. As an additional protection mechanism, posts can be permanently deleted by the same administrator who deleted the post only after 5 minutes have passed OR by a different administrator immediately. If post cannot be deleted because none of the preconditions were met, it will show an error message:

If your site is hosted by us, contact us and we will enable it for you. If you host it yourself, to enable it you must enter the console (rails c) and change the site setting value:

SiteSetting.can_permanently_delete = true

Are there dangers such as reduced database performance, inconsistencies, anything else? Or is not being able to recover the permanently deleted posts the only danger?


It is just that once a post is deleted it is gone forever and it cannot be recovered. There are no performance concerns.


I actually have the opposite question: isn’t there reduced performance from Discourse from only soft deleting posts instead always permanently deleting them? There must be some burden acumulated after some years for some forums. Is it done this way to keep statistics for each account even when posts/topics are removed?

1 Like

Not really. BTree indexes mean we can search in O(log n) for posts and topics, so there is a sub-linear cost growth.

In the largest Discourse instances out there, post quantity never were the performance bottleneck in production. That said we keep an eye on it and we can always come back and refactor it if needed.


In short, no.

First of all, I believe that most communities have many more visible posts than deleted posts. For example, here on Meta the total amount of posts is 1,015,386 and only 81,480 of these are deleted. That is less than 10%. Probably the total amount of deleted data is less than 100MB of data.

As Falco said, the performance impact of storing and indexing more data is negligible. Database systems are optimized to hold a lot more data than one can imagine and even the most simple configurations can hold thousands of thousands of data points without breaking a sweat.

Maybe this is not the best comparison in the world, but can you notice your PC getting slower as you store more files? Most probably no and the file system is some kind of database system too. :slight_smile: