In PostgreSQL, TRUNCATE holds an exclusive access lock on the table until the transaction commits. This can cause problems where db_truncate is called, such as in _menu_router_save, when one clears the cache, for example. DELETE FROM queries don't hold exclusive access locks, and while they don't immediately reclaim the disk space like TRUNCATE would, autovacuum is enabled by default in PostgreSQL, and has been for 5+ years.

Access Exclusive locks are the most Draconian of table locks, thwarting SELECTs and all other queries while in the transaction block. On a high traffic site, this can mean timeouts, white screen, and all sorts of bad times. Is there a method to the madness, or can all TruncateQuerys' be overridden/replaced by DELETE FROM's instead? Drupal is already doing this for the other supported backends, so why not PostgreSQL?