Improve ereports for VACUUM's BUFFER_USAGE_LIMIT option
authorDavid Rowley <[email protected]>
Tue, 11 Apr 2023 07:36:34 +0000 (19:36 +1200)
committerDavid Rowley <[email protected]>
Tue, 11 Apr 2023 07:36:34 +0000 (19:36 +1200)
There's no need to check if opt->arg is NULL since defGetString() already
does that and raises an ERROR if it is.  Let's just remove that check.

Also, combine the two remaining ERRORs into a single check.  It seems
better to give an indication about what sort of values we're looking for
rather than just to state that the value given isn't valid.  Make
BUFFER_USAGE_LIMIT uppercase in this ERROR message too.  It's already
upper case in one other error message, so make that consistent.

Reported-by: Kyotaro Horiguchi
Discussion: https://postgr.es/m/20230411.102335.1643720544536884844[email protected]

src/backend/commands/vacuum.c
src/test/regress/expected/vacuum.out

index 873209d946aef3c9285d826843bf77069c17627a..a843f9ad926e0a893d7b8372aa0b02e817c9c889 100644 (file)
@@ -195,38 +195,21 @@ ExecVacuum(ParseState *pstate, VacuumStmt *vacstmt, bool isTopLevel)
            int         result;
            char       *vac_buffer_size;
 
-           if (opt->arg == NULL)
-           {
-               ereport(ERROR,
-                       (errcode(ERRCODE_SYNTAX_ERROR),
-                        errmsg("buffer_usage_limit option requires a valid value"),
-                        parser_errposition(pstate, opt->location)));
-           }
-
            vac_buffer_size = defGetString(opt);
 
-           if (!parse_int(vac_buffer_size, &result, GUC_UNIT_KB, &hintmsg))
-           {
-               ereport(ERROR,
-                       (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-                        errmsg("value: \"%s\": is invalid for buffer_usage_limit",
-                               vac_buffer_size),
-                        hintmsg ? errhint("%s", _(hintmsg)) : 0));
-           }
-
            /*
-            * Check that the specified size falls within the hard upper and
-            * lower limits if it is not 0.  We explicitly disallow -1 since
-            * that behavior can be obtained by not specifying
-            * BUFFER_USAGE_LIMIT.
+            * Check that the specified value is valid and the size falls
+            * within the hard upper and lower limits if it is not 0.
             */
-           if (result != 0 &&
-               (result < MIN_BAS_VAC_RING_SIZE_KB || result > MAX_BAS_VAC_RING_SIZE_KB))
+           if (!parse_int(vac_buffer_size, &result, GUC_UNIT_KB, &hintmsg) ||
+               (result != 0 &&
+                (result < MIN_BAS_VAC_RING_SIZE_KB || result > MAX_BAS_VAC_RING_SIZE_KB)))
            {
                ereport(ERROR,
                        (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-                        errmsg("buffer_usage_limit option must be 0 or between %d kB and %d kB",
-                               MIN_BAS_VAC_RING_SIZE_KB, MAX_BAS_VAC_RING_SIZE_KB)));
+                        errmsg("BUFFER_USAGE_LIMIT option must be 0 or between %d kB and %d kB",
+                               MIN_BAS_VAC_RING_SIZE_KB, MAX_BAS_VAC_RING_SIZE_KB),
+                        hintmsg ? errhint("%s", _(hintmsg)) : 0));
            }
 
            ring_size = result;
index 044b761024b3237789fa511ff98e1d4b81a91af4..41e020cf20c9aaca1569fc0a7369291a7065aa14 100644 (file)
@@ -358,13 +358,13 @@ VACUUM (BUFFER_USAGE_LIMIT 0) vac_option_tab;
 ANALYZE (BUFFER_USAGE_LIMIT 0) vac_option_tab;
 -- value exceeds max size error
 VACUUM (BUFFER_USAGE_LIMIT 16777220) vac_option_tab;
-ERROR:  buffer_usage_limit option must be 0 or between 128 kB and 16777216 kB
+ERROR:  BUFFER_USAGE_LIMIT option must be 0 or between 128 kB and 16777216 kB
 -- value is less than min size error
 VACUUM (BUFFER_USAGE_LIMIT 120) vac_option_tab;
-ERROR:  buffer_usage_limit option must be 0 or between 128 kB and 16777216 kB
+ERROR:  BUFFER_USAGE_LIMIT option must be 0 or between 128 kB and 16777216 kB
 -- integer overflow error
 VACUUM (BUFFER_USAGE_LIMIT 10000000000) vac_option_tab;
-ERROR:  value: "10000000000": is invalid for buffer_usage_limit
+ERROR:  BUFFER_USAGE_LIMIT option must be 0 or between 128 kB and 16777216 kB
 HINT:  Value exceeds integer range.
 -- incompatible with VACUUM FULL error
 VACUUM (BUFFER_USAGE_LIMIT '512 kB', FULL) vac_option_tab;