Subject: Tighten ACL check in repack_is_permitted_for_relation()

From: Bharath Rupireddy <[email-masked]>
Date: Tue, 4 Aug 2026 01:13:00 -0700

Hi,

(CC-ing Álvaro Herrera for some thoughts)

repack_is_permitted_for_relation() uses pg_class_aclcheck_ext() to
silently skip a concurrently-dropped relation. That's wrong for a
caller that may already hold a lock on the relation whose ACL is
checked, where missing a relation is not fine, and it makes the
single-relation REPACK cases more brittle
(https://www.postgresql.org/message-id/akPhEffRipH4isWF@nathan). So
only detect a missing relation where that's expected, following the
fix for vacuum_is_permitted_for_relation() in commit 824d5f6. The new
missing_ok behavior is limited to get_tables_to_repack() and
get_tables_to_repack_partitioned(). All other callers of
repack_is_permitted_for_relation() hold a lock on the relation that
prevents it from being concurrently dropped, so this commit also adds
an assertion to that effect.

I posted this in the thread but starting a new discussion to get some
quick thoughts:
https://www.postgresql.org/message-id/CALj2ACX3pyuRS8%2B%2B6L20cJUMRTf_qbbVp69J1btJ3y6%3D77e5gw%40mail.gmail.com

Please find the attached patch for review.

-- 
Bharath Rupireddy
Amazon Web Services: https://aws.amazon.com

---

From: Michael Paquier <[email-masked]>
Date: Fri, 14 Aug 2026 12:51:33 +0900

> Please find the attached patch for review.

Alvaro, could you comment please?

Perhaps this is something that should be an open item for v19 due to
the fact that it is new code and it can make a REPACK operation more
disruptive depending on unlocky circumstances and concurrent activity?
If Alvaro thinks differently, that's fine, as REPACK is his feature.
it just seems to me like one possible option on the table.
--
Michael

---

From: Bharath Rupireddy <[email-masked]>
Date: Sun, 16 Aug 2026 20:15:00 -0700

Hi,

> it just seems to me like one possible option on the table.

I added this as an open item for PG19 to get some thoughts before the
release. Thanks.