On 2025-Jul-23, Nathan Bossart wrote: > On Wed, Jul 23, 2025 at 05:38:34PM +0200, Álvaro Herrera wrote: > > I noticed some duplicative coding while hacking on REPACK[1]. We can > > save a few lines now with a trivial change to the rules for CHECKPOINT > > and REINDEX, and allow to save a few extra lines in that patch. > > > > Any objections to this? > > Seems reasonable to me. Any chance we can use this for CLUSTER, VACUUM, > ANALYZE, and EXPLAIN, too?
ANALYZE and VACUUM cannot be changed this way, because the productions where options are optional are the legacy ones; so running "VACUUM/ANALYZE table" uses that one, and we cannot change that: VacuumStmt: VACUUM opt_full opt_freeze opt_verbose opt_analyze opt_vacuum_relation_list EXPLAIN doesn't work because the '(' starts either a query (via select_with_parens) or an option list, so you get a shift/reduce conflict. I hadn't looked at CLUSTER, because the REPACK patch is absorbing that rule into a larger rule for both REPACK and CLUSTER. But now that I look again, I realize that apparently my REPACK branch is bogus, because I forgot to add a production for "CLUSTER name ON qualified_name". And with that one put back, I cannot use opt_utility_option_list there either, because the above conflicts with "CLUSTER opt_utility_option_list qualified_name cluster_index_specification". So we can still do this, and I still think it's a win, but unfortunately it won't help for the REPACK patch. -- Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/ Voy a acabar con todos los humanos / con los humanos yo acabaré voy a acabar con todos (bis) / con todos los humanos acabaré ¡acabaré! (Bender)