Skip to content

Commit 5cfba1a

Browse files
committed
Fix vacuumdb to pass buffer-usage-limit with analyze-only mode
ae78cae added the --buffer-usage-limit to vacuumdb to allow it to include the BUFFER_USAGE_LIMIT option in the VACUUM command. Unfortunately, that commit forgot to adjust the code so the option was added to the ANALYZE command when the -Z command line argument was specified. There were no issues with the -z command as that option just adds ANALYZE to the VACUUM command. In passing adjust the code to escape the --buffer-usage-limit option before passing it to the server. It seems nothing beyond a confusing error message could become this lack of escaping as VACUUM cannot be specified in a multi-command string. Reported-by: Ryoga Yoshida Author: Ryoga Yoshida, David Rowley Discussion: https://postgr.es/m/08930c0b541700a5264e5fbf3a685f5a%40oss.nttdata.com Backpatch-through: 16, where ae78cae was introduced.
1 parent e5975c2 commit 5cfba1a

File tree

1 file changed

+24
-1
lines changed

1 file changed

+24
-1
lines changed

src/bin/scripts/vacuumdb.c

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ static void help(const char *progname);
8585

8686
void check_objfilter(void);
8787

88+
static char *escape_quotes(const char *src);
89+
8890
/* For analyze-in-stages mode */
8991
#define ANALYZE_NO_STAGE -1
9092
#define ANALYZE_NUM_STAGES 3
@@ -270,7 +272,7 @@ main(int argc, char *argv[])
270272
vacopts.process_main = false;
271273
break;
272274
case 13:
273-
vacopts.buffer_usage_limit = pg_strdup(optarg);
275+
vacopts.buffer_usage_limit = escape_quotes(optarg);
274276
break;
275277
default:
276278
/* getopt_long already emitted a complaint */
@@ -452,6 +454,20 @@ check_objfilter(void)
452454
pg_fatal("cannot vacuum all tables in schema(s) and exclude schema(s) at the same time");
453455
}
454456

457+
/*
458+
* Returns a newly malloc'd version of 'src' with escaped single quotes and
459+
* backslashes.
460+
*/
461+
static char *
462+
escape_quotes(const char *src)
463+
{
464+
char *result = escape_single_quotes_ascii(src);
465+
466+
if (!result)
467+
pg_fatal("out of memory");
468+
return result;
469+
}
470+
455471
/*
456472
* vacuum_one_database
457473
*
@@ -964,6 +980,13 @@ prepare_vacuum_command(PQExpBuffer sql, int serverVersion,
964980
appendPQExpBuffer(sql, "%sVERBOSE", sep);
965981
sep = comma;
966982
}
983+
if (vacopts->buffer_usage_limit)
984+
{
985+
Assert(serverVersion >= 160000);
986+
appendPQExpBuffer(sql, "%sBUFFER_USAGE_LIMIT '%s'", sep,
987+
vacopts->buffer_usage_limit);
988+
sep = comma;
989+
}
967990
if (sep != paren)
968991
appendPQExpBufferChar(sql, ')');
969992
}

0 commit comments

Comments
 (0)