| From: | Fujii Masao <masao(dot)fujii(at)gmail(dot)com> |
|---|---|
| To: | Ewan Young <kdbase(dot)hack(at)gmail(dot)com> |
| Cc: | Shinya Kato <shinya11(dot)kato(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
| Subject: | Re: doc: REPACK is missing from the MAINTAIN privilege documentation |
| Date: | 2026-07-15 09:55:09 |
| Message-ID: | CAHGQGwEPRRqUwLdSqiZKnTwKKncjTaGCwY9bV1UXekeqQaPv8g@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
On Wed, Jul 15, 2026 at 3:59 PM Ewan Young <kdbase(dot)hack(at)gmail(dot)com> wrote:
>
> On Wed, Jul 15, 2026 at 12:02 PM Shinya Kato <shinya11(dot)kato(at)gmail(dot)com> wrote:
> >
> > Hi hackers,
> >
> > REPACK requires the MAINTAIN privilege, as its documentation states,
> > but REPACK is missing from the two places that enumerate the commands
> > MAINTAIN covers: the MAINTAIN privilege description in ddl.sgml and
> > the pg_maintain predefined role description in user-manag.sgml. This
> > looks like an oversight in commit ac58465e061, which introduced
> > REPACK.
> >
> > The attached patch adds REPACK next to CLUSTER in both places.
>
> Confirmed, and the patch looks correct to me. REPACK does require
> MAINTAIN (per repack.sgml), and ac58465e061 missed adding it to these
> lists.
>
> I went through the other places that mention MAINTAIN, and these two are
> indeed the only spots that enumerate the covered commands: grant.sgml
> just points at ddl-priv, the privilege-abbreviations table only gives
> the name/letter, and the GRANT/REVOKE synopses list MAINTAIN as a
> keyword rather than expanding it. The per-command reference pages only
> state that they require MAINTAIN. So the patch is complete. The
> sql-repack link target exists too, and putting REPACK right after
> CLUSTER reads well.
>
> +1 from me.
+1
It's also better to update the following source comment in aclchk.c.
/*
* Check if ACL_MAINTAIN is being checked and, if so, and not already set
* as part of the result, then check if the user is a member of the
* pg_maintain role, which allows VACUUM, ANALYZE, CLUSTER, REFRESH
* MATERIALIZED VIEW, REINDEX, and LOCK TABLE on all relations.
*/
if (mask & ACL_MAINTAIN &&
!(result & ACL_MAINTAIN) &&
has_privs_of_role(roleid, ROLE_PG_MAINTAIN))
result |= ACL_MAINTAIN;
Regards,
--
Fujii Masao
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Bruce Momjian | 2026-07-15 09:56:07 | Re: First draft of PG 19 release notes |
| Previous Message | vignesh C | 2026-07-15 09:13:59 | Re: sequencesync worker race with REFRESH SEQUENCES |