Thread: BUG #14042: bug, PostgreSQL not cleanup temp table info after crash.
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