Thread: Cleaning bloated pg_attribute

Cleaning bloated pg_attribute

From
Michal Taborsky
Date:
I managed, by extensive usage of temporary tables, to totally bloat
pg_attribute. It currently has about 40000 pages with just 3000 tuples.
The question is, how to restore it to it's former beauty? With ordinary
table I'd just CLUSTER it, but alas! I cannot do that with system
catalog. I always get:

db=# cluster pg_attribute_relid_attnam_index on pg_attribute;
ERROR:  "pg_attribute" is a system catalog

The only thing I could think of is VACUUM FULL, but from my former
experience I guess it'll take maybe over an hour, effectively rendering
the server unusable, because of the exclusive lock. It is a live 24/7
system, so I'd really prefer something less drastic than dumping and
reloading the database (though it's still shorter downtime than with the
vacuum.)

Isn't there a way to somehow go around the above mentioned limitation
and CLUSTER the table?

Thanks for your ideas.

--
Michal Táborský
CTO, Internet Mall, a.s.

Internet Mall - obchody, které si oblíbíte
<http://www.MALL.cz>

Re: Cleaning bloated pg_attribute

From
Richard Huxton
Date:
Michal Taborsky wrote:
> I managed, by extensive usage of temporary tables, to totally bloat
> pg_attribute. It currently has about 40000 pages with just 3000 tuples.

> The only thing I could think of is VACUUM FULL, but from my former
> experience I guess it'll take maybe over an hour, effectively rendering
> the server unusable, because of the exclusive lock.

You can vacuum full a single table - shouldn't take an hour for just the
one table. Unless your disk I/O is *constantly* running flat-out.

--
   Richard Huxton
   Archonet Ltd