Heap WARM Tuples – Design Draft
postgresql.org
postgresql.org
Summary: a table with around 50,000 rows that gets joined to other tables a lot, with one index per column, and that table receives ~500 writes a second, causing a "write amplification" because all the indexes need updating constantly.
It's not hard to imagine lots of other workloads involving patterns like that. Postgres has most simple use cases solved, so IMHO improving complex patterns like this is good for Postgres' future.
This helps cut down on re-work from misunderstandings, as well as provides a historical record of why something changed.
I believe we can get the code working in a few days, and there are probably people already working on a PoC of this (or one of the alternative proposals). So if this is what you mean by implementing, the answer is "days".
But as anarazel is pointing out, this is going to touch a fairly critical part of the database - it interacts with storage, MVCC and likely various other things (e.g. various index optimizations like Index Only Scans).
Moreover there are other proposals (I'm aware of 3 or 4, and I might have missed some), so the question inevitably will be - which of the proposals is the best compromise?
So I expect a lengthy discussions on pgsql-hackers, a lot of testing, benchmarking etc.
But all this does not really matter that much - there's no chance this could get into current releases, so the earliest release it can get into is 10, which means code freeze likely sometime in April/May 2017.
Another similar use-case is game sessions. Membership within a session changes constantly and so do the sessions themselves. They are also both deleted often.
If you run pg_dump on the same instance, it will keep long transactions open, which will cause VACUUM to struggle.
Biggest issues I've heard are either the long running transaction (mitigated a bit by running on a slave), cache busting effect (reading all your data thrashes your OS disk cache), and how painfully long it can take (good luck running pg_dump on a multi TB database). As a backup to a more "live" backup, it's nice to have though. Plus it's dead simple to restore a DB via pg_restore in a lower environment for testing.