Re: Purging few months old data and vacuuming in production

Ron <ronljohnsonjr@gmail.com>

From: Ron <ronljohnsonjr@gmail.com>
To: "pgsql-general@lists.postgresql.org" <pgsql-general@lists.postgresql.org>
Date: 2023-01-06T14:57:26Z
Lists: pgsql-general
On 1/6/23 08:27, Ranjith Paliyath wrote:
> Thank you very much for the response.
>
>      > Can you do online purging?
>
>      > For example, get a list of the main table's primary keys to be deleted, and
>      > then nibble away at them all day: in one transaction delete all the records
>      > for one logically related set of records.  Do that N million times, and
>      > you've purged the data without impacting production.
>
> So, with this approach, is the advantage like, manual vacuuming worry may be set aside, because auto-vacuuming would deal with the dead rows?

Theoretically, manual vacuuming is never necessary.  I'd occasionally do 
manual vacuums (after purging a couple of weeks of data, for example).

Disable autovacuum on a table, vacuum it, then reenable autovacuum.

ALTER TABLE table_name SET (autovacuum_enabled = false);
VACUUM table_name;
ALTER TABLE table_name SET (autovacuum_enabled = true);


>   This is because the deletion step is executed record by record in main table, with its connected record(s) delete executions in rest of tables?

I don't know if you have ON DELETE CASCADE.  Even if you do, you'll have to 
manually delete the tables not linked by FK.  I'd write a PL/pgSQL 
procedure: pass in a PK and then delete records from the 9 tables in the 
proper order so as to not throw FK constraint errors.

> Due to the infra capability that is there in this instance,

What is "infra capability"?

> the impact could be almost none!!??

It'll use /some/ resources, because it's a thread deleting records, but most 
of the records and index nodes won't be where new records are being inserted.

Note, though, that this will generate a lot of WAL records.

-- 
Born in Arizona, moved to Babylonia.