On Tue, 2023-06-06 at 11:36 -0300, Marcos Pegoraro wrote:
> I have a replica server using Postgres 14.4.
> Replica is done using Publication/Subscription and I have triggers for 
> auditing,
> so every record which comes from production is audited.
> Some months ago I changed the way I was auditing and replaced that audit table
> for a new one, but didn't remove the old table. So I have both, new (AUDIT) 
> and
> old (SYS_AUDIT) tables. 
> Then last night I received this message that to prevent wraparound postgres 
> would
> do an aggressive vacuum on (SYS_AUDIT), and that took several hours to 
> complete,
> in a table that is not used for 6 or 8 months. Why ?

Because otherwise the rows in that table would suffer data corruption at some 
point.
See 
https://www.postgresql.org/docs/current/routine-vacuuming.html#VACUUM-FOR-WRAPAROUND

PostgreSQL doesn't know what you don't need these data any more.

> I know it would be good to run vacuum on that table, it has lots of dead 
> tuples,
> but that table is not used anymore, so why vacuum it ?

This is not about dead tuples at all.

> I have to drop immediately that huge table that is not used anymore because 
> it can
> stop the server to prevent a wraparound some day ?

No, you don't have to drop it.

If you know that the table will not change any more, you can run

  VACUUM (FREEZE) tablename;

That will be as intense as the anti-wraparound autovacuum that caused your 
concern,
but afterwards you will never again have a long-running, intense autovacuum run 
on
that table.

Yours,
Laurenz Albe


Reply via email to