Since the impact of the long transaction is huge in postgresql, for example a long transaction by incident, tables may become very huge and it can't become small again even the transaction is completed unless a vacuum full is used.
I have 2 ideas about this. One is in the Read Committed level, we can advance xmin aggressively. suppose it started at t1, and complete a query at t2. the xmin should be t1 currently. Can we advance the xmin to t2 since it is read committed level, The data older than t2 will never be used? Another one is can we force to clean up the old tuples which are older than xxx? If users want to access that, we can just raise errors. Oracle uses this strategy and the error code is ORA-01555. -- Best Regards Andy Fan