Re: Adding REPACK [concurrently] - Mailing list pgsql-hackers

From Antonin Houska
Subject Re: Adding REPACK [concurrently]
Date
Msg-id 238425.1774981353@localhost
Whole thread Raw
In response to Re: Adding REPACK [concurrently]  (Srinath Reddy Sadipiralla <srinath2133@gmail.com>)
List pgsql-hackers
Srinath Reddy Sadipiralla <srinath2133@gmail.com> wrote:

> On Thu, Mar 26, 2026 at 1:42 AM Alvaro Herrera <alvherre@alvh.no-ip.org> wrote:
>
>  As for lock upgrade, I wonder if the best way to handle this isn't to
>  hack the deadlock detector so that it causes any *other* process to die,
>  if they detect that they would block on REPACK.  Arguably there's
>  nothing that you can do to a table while its undergoing REPACK
>  CONCURRENTLY; any alterations would have to wait until the repacking is
>  compelted.  We can implement that idea simply enough, as shown in this
>  crude prototype.
>
> After testing this, I observed that it solves the scenario where a query is waiting
> on REPACK. For example, if a DROP TABLE requests an AEL and queues
> behind REPACK's ShareUpdateExclusiveLock, the deadlock detector comes
> when REPACK tries to upgrade to AEL, killing the DROP to prevent the circular
> queue deadlock, But the case I originally mentioned [1] was the reverse: what
> happens if a transaction already holds a lock that conflicts with the upcoming
> AEL upgrade (e.g., an analytical SELECT or an idle-in-transaction holding an AccessShareLock),
> but isn't waiting on REPACK at all?
>
> In this case, there's no circular wait. The deadlock detector never fires. REPACK
> simply queues behind the SELECT, eventually hits its lock_timeout, aborts and
> cleans up.

Why should the user set non-zero lock_timeout before running REPACK?

--
Antonin Houska
Web: https://www.cybertec-postgresql.com



pgsql-hackers by date:

Previous
From: Nathan Bossart
Date:
Subject: Re: vectorized CRC on ARM64
Next
From: Alvaro Herrera
Date:
Subject: Re: Adding REPACK [concurrently]