public inbox for [email protected]
help / color / mirror / Atom feedFrom: Gus Spier <[email protected]>
To: Ron Johnson <[email protected]>
Cc: Olivier Gautherot <[email protected]>
Cc: Tom Lane <[email protected]>
Cc: David G. Johnston <[email protected]>
Cc: pgsql-general <[email protected]>
Subject: Re: Attempting to delete excess rows from table with BATCH DELETE
Date: Wed, 28 Jan 2026 10:39:00 -0500
Message-ID: <CAG8xniexsPtem2+5KpsAv_J-qO2dtD1tkhgcsD_f7H6xnrbPmw@mail.gmail.com> (raw)
In-Reply-To: <CANzqJaC-u_kkwHK5jKQZ6zedUYDXXFq7CX8Y4_zh0ZB0QMtO5Q@mail.gmail.com>
References: <CAG8xnif_jmRYAGUvtoQNsHA8UqGRDkwuSffO55-3wGMLQArA8g@mail.gmail.com>
<CAKFQuwbudVTMKedFTuR+GXntRM=oZ=sCgyp1Ztg2=DUciuEbQA@mail.gmail.com>
<[email protected]>
<CANzqJaCydWJm8utvhLMWy62MGRYP0qdK134WB8NzXTJf=KUEPg@mail.gmail.com>
<[email protected]>
<CAJ7S9TWwFpaRD9eND1=GMmCoKPG4fDasU6LBEd=yaq2JyNqRdA@mail.gmail.com>
<CAG8xnie28cnR7220M8G3iQ0G-L_c3WOp6ZrSOiP58M3-B=6-Zw@mail.gmail.com>
<CANzqJaC-u_kkwHK5jKQZ6zedUYDXXFq7CX8Y4_zh0ZB0QMtO5Q@mail.gmail.com>
Good thoughts. Thanks, Ron!
On Wed, Jan 28, 2026 at 10:02 AM Ron Johnson <[email protected]> wrote:
>
> More thoughts:
> 1. In cases where records are huge (bytea storing images) I added an inner hourly loop.
> 2. Disable autovaccum on the table you're purging, then run pg_repack on it and re-enable autovacuum.
> 3. pg_repack --no-order is a lot faster than having it order by the PK. (You might want it ordered by an indexed date field, though.)
>
> On Wed, Jan 28, 2026 at 5:57 AM Gus Spier <[email protected]> wrote:
>>
>> Thanks to all.
>>
>> I'll give the bash loop method a try and let you know how it works out.
>>
>> Regards to all,
>> Gus
>>
>>
>> On Wed, Jan 28, 2026 at 2:32 AM Olivier Gautherot
>> <[email protected]> wrote:
>> >
>> > Hi Gus!
>> >
>> > This reminds me of a costly mistake I made and you want to avoid: it was a mission critical database (say physical safety, real people) and the vacuum froze the DB for 24 hours, until I finally took it offline.
>> >
>> > If you can take it offline (and you have a couple of hours)
>> > - disconnect the DB
>> > - drop indexes (that's the killer)
>> > - remove unnecessary data
>> > - vaccuum manually (or better, copy the relevant data to a new table and rename it - this will save the DELETE above and will defragment the table)
>> > - rebuild indexes
>> > - connect the DB
>> >
>> > The better solution would be partitioning:
>> > - choose a metrics (for instance a timestamp)
>> > - create partition tables for the period you want to keep
>> > - copy the relevant data to the partitions and create partial indexes
>> > - take the DB off line
>> > - update the last partition with the latest data (should be a fast update)
>> > - truncate the original table
>> > - connect partitions
>> > - connect the DB
>> >
>> > In the future, deleting historic data will be a simple DROP TABLE.
>> >
>> > Hope it helps
>> > --
>> > Olivier Gautherot
>> > Tel: +33 6 02 71 92 23
>> >
>> >
>> > El mié, 28 de ene de 2026, 5:06 a.m., Tom Lane <[email protected]> escribió:
>> >>
>> >> Ron Johnson <[email protected]> writes:
>> >> > Hmm. Must have been START TRANSACTION which I remember causing issues in DO
>> >> > blocks.
>> >>
>> >> Too lazy to test, but I think we might reject that. The normal rule
>> >> in a procedure is that the next command after a COMMIT automatically
>> >> starts a new transaction, so you don't need an explicit START.
>> >>
>> >> regards, tom lane
>> >>
>> >>
>
>
>
> --
> Death to <Redacted>, and butter sauce.
> Don't boil me, I'm still alive.
> <Redacted> lobster!
view thread (2+ messages)
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected], [email protected], [email protected], [email protected], [email protected], [email protected]
Subject: Re: Attempting to delete excess rows from table with BATCH DELETE
In-Reply-To: <CAG8xniexsPtem2+5KpsAv_J-qO2dtD1tkhgcsD_f7H6xnrbPmw@mail.gmail.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox