REPACK ONLY is accepted but ignored
The REPACK grammar accepts ONLY and a trailing * like VACUUM does, but it's
neither documented nor handled in the REPACK code. From a v19 perspective,
it might be best to just reject that syntax for now, but that does mean it
won't be able to do everything VACUUM (FULL) can.
--
nathan
On Thu, Aug 27, 2026 at 10:11:45AM -0500, Nathan Bossart wrote:
The REPACK grammar accepts ONLY and a trailing * like VACUUM does, but it's
neither documented nor handled in the REPACK code. From a v19 perspective,
it might be best to just reject that syntax for now, but that does mean it
won't be able to do everything VACUUM (FULL) can.
Bringing REPACK in line with its documentation looks pretty simple. This
is probably the way to go for v19, as proper support for ONLY and trailing
* seems to require more invasive changes.
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index a33c3aaeeb2..2df39a48fc6 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -12543,25 +12543,25 @@ CreateConversionStmt:
*****************************************************************************/
RepackStmt:
- REPACK opt_utility_option_list vacuum_relation USING INDEX name
+ REPACK opt_utility_option_list qualified_name opt_name_list USING INDEX name
{
RepackStmt *n = makeNode(RepackStmt);
n->command = REPACK_COMMAND_REPACK;
- n->relation = (VacuumRelation *) $3;
- n->indexname = $6;
+ n->relation = makeVacuumRelation($3, InvalidOid, $4);
+ n->indexname = $7;
n->usingindex = true;
n->params = $2;
$$ = (Node *) n;
}
- | REPACK opt_utility_option_list vacuum_relation opt_usingindex
+ | REPACK opt_utility_option_list qualified_name opt_name_list opt_usingindex
{
RepackStmt *n = makeNode(RepackStmt);
n->command = REPACK_COMMAND_REPACK;
- n->relation = (VacuumRelation *) $3;
+ n->relation = makeVacuumRelation($3, InvalidOid, $4);
n->indexname = NULL;
- n->usingindex = $4;
+ n->usingindex = $5;
n->params = $2;
$$ = (Node *) n;
}
--
nathan
Nathan Bossart <nathandbossart@gmail.com> wrote:
On Thu, Aug 27, 2026 at 10:11:45AM -0500, Nathan Bossart wrote:
The REPACK grammar accepts ONLY and a trailing * like VACUUM does, but it's
neither documented nor handled in the REPACK code. From a v19 perspective,
it might be best to just reject that syntax for now, but that does mean it
won't be able to do everything VACUUM (FULL) can.Bringing REPACK in line with its documentation looks pretty simple. This
is probably the way to go for v19, as proper support for ONLY and trailing
* seems to require more invasive changes.diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index a33c3aaeeb2..2df39a48fc6 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -12543,25 +12543,25 @@ CreateConversionStmt: *****************************************************************************/RepackStmt: - REPACK opt_utility_option_list vacuum_relation USING INDEX name + REPACK opt_utility_option_list qualified_name opt_name_list USING INDEX name { RepackStmt *n = makeNode(RepackStmt);n->command = REPACK_COMMAND_REPACK; - n->relation = (VacuumRelation *) $3; - n->indexname = $6; + n->relation = makeVacuumRelation($3, InvalidOid, $4); + n->indexname = $7; n->usingindex = true; n->params = $2; $$ = (Node *) n; } - | REPACK opt_utility_option_list vacuum_relation opt_usingindex + | REPACK opt_utility_option_list qualified_name opt_name_list opt_usingindex { RepackStmt *n = makeNode(RepackStmt);n->command = REPACK_COMMAND_REPACK; - n->relation = (VacuumRelation *) $3; + n->relation = makeVacuumRelation($3, InvalidOid, $4); n->indexname = NULL; - n->usingindex = $4; + n->usingindex = $5; n->params = $2; $$ = (Node *) n; }
At the moment, I can't think of other reason for using the 'vacuum_relation'
rule than the effort to replace both CLUSTER and VACUUM FULL. Unfortunately it
appears that the difference in the command arguments was missed. What you
propose LGTM, thanks.
--
Antonin Houska
Web: https://www.cybertec-postgresql.com
On Sat, Aug 29, 2026 at 03:34:42PM +0200, Antonin Houska wrote:
At the moment, I can't think of other reason for using the 'vacuum_relation'
rule than the effort to replace both CLUSTER and VACUUM FULL. Unfortunately it
appears that the difference in the command arguments was missed. What you
propose LGTM, thanks.
Committed, thanks for looking.
--
nathan