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.