The only scalable delete in Postgres is DROP TABLE
Jun 11, 2026Tom Pang

Summary
This post details the performance implications of large `DELETE` operations in PostgreSQL, explaining how MVCC, dead tuples, and replication overhead contribute to performance degradation. It contrasts this with the efficiency of `DROP TABLE` and `TRUNCATE` for bulk data removal, highlighting their immediate space reclamation and lack of dead tuple generation. The post introduces a transactional strategy for one-off large deletes using temporary tables and `TRUNCATE`, and advocates for date-based partitioning to transform ongoing delete workloads into periodic `DROP TABLE` operations on partitions. It also mentions `pg_squeeze` as a tool for tables with existing bloat.