Tom Pang | June 11, 2026 Counterintuitively, large DELETE s add work to the database. From experience we can plainly claim the following: the most scalable Postgres data-deletion strategies revolve around deleting entire tables. Individual row DELETE is fine at a small scale. However, big batch DELETE operations don't immediately free up physical disk space, add write and replication overhead, and are ultimately not good for large scale row cleanup. If your application needs to delete large amounts of data, even very rarely, we recommend moving towards schema designs that let you express that as a DROP TABLE or a TRUNCATE . Let's study why this is by looking at how DELETE works in Postgres. Deletes hurt When rows mutate, Postgres can maintain multiple versions of the same row, so that different transactions can see row values as of the time they were queried. This is Postgres' implementation of "Multi-Version Concurrency Control" (MVCC) and a core principle of its design.…