Re: Temporary tables prevent autovacuum, leading to XID wraparound

Michael Paquier <michael.paquier@gmail.com>

From: Michael Paquier <michael.paquier@gmail.com>
To: Robert Haas <robertmhaas@gmail.com>
Cc: "Tsunakawa, Takayuki" <tsunakawa.takay@jp.fujitsu.com>, "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
Date: 2018-02-06T23:03:26Z
Lists: pgsql-hackers
On Tue, Feb 06, 2018 at 11:33:59AM -0500, Robert Haas wrote:
> This is really two separate changes:
> 
> 1. Teach backends to remove any leftover pg_temp_%d schema on
> startup.

I am not sure that we would like to give up that easily the property
that we have now to clean up past temporary files only at postmaster
startup and only when not in recovery.  If you implement that, there is
a risk that the backend you are starting is eating the connection slot
and by consequence its temporary schema and its set of temporary tables
on which one may want to look into after a crash.

> 2. Teach autovacuum to remove any leftover tables in a pg_temp_%d
> schema if the backend is active but in some other database (rather
> than only when the backend is not active at all).

Yeah.  Here we can do something.  This does not sound much difficult to
me.
--
Michael

Commits

  1. Clarify comment about assignment and reset of temp namespace ID in MyProc

  2. Make autovacuum more aggressive to remove orphaned temp tables

  3. Don't count background workers against a user's connection limit.