Thread: BUG #14042: bug, PostgreSQL not cleanup temp table info after crash.

BUG #14042: bug, PostgreSQL not cleanup temp table info after crash.

From
digoal@126.com
Date:
The following bug has been logged on the website:

Bug reference:      14042
Logged by:          digoal
Email address:      digoal@126.com
PostgreSQL version: 9.5.1
Operating system:   CentOS 6.x x64
Description:

When PostgreSQL crashed during database have temp table, database not
cleanup the temp table's info in pg_class.
and there is some bad thing, if no one create the same name temp table after
restart. this temp table will a zombie in pg_class, and vacuum freeze cann't
reduce it's age and database's age.
test:
create temp table t(id int);
don't disconnect this session.

and then:
pg_ctl stop -m immediate

and then
pg_ctl start

and then
select * from pg_namespace;
select age(relfrozenxid),relname from pg_class where relname='t';
select txid_current();
generate some xid;
vauum freeze pg_temp_??.t;
and the table not reduce age.
select age(relfrozenxid),relname from pg_class where relname='t';
and database's age cann't reduce by
vacuum freeze;
digoal@126.com writes:
> When PostgreSQL crashed during database have temp table, database not
> cleanup the temp table's info in pg_class.

This behavior is intentional.

> and there is some bad thing, if no one create the same name temp table after
> restart. this temp table will a zombie in pg_class, and vacuum freeze cann't
> reduce it's age and database's age.

This is not a problem, see the code in autovacuum.c:

                /*
                 * We found an orphan temp table (which was probably left
                 * behind by a crashed backend).  If it's so old as to need
                 * vacuum for wraparound, forcibly drop it.  Otherwise just
                 * log a complaint.
                 */

In practice, such tables will go away the next time some session uses the
temp schema containing them, so their lifespan isn't likely to be nearly
long enough for this code to activate.  But in any case, they won't create
a wraparound hazard.

            regards, tom lane