Skip to content

Commit cf1450e

Browse files
vacuumdb: Move some variables to the vacuumingOptions struct.
Presently, the "echo" and "quiet" variables are carted around to various functions, which is a bit tedious. To simplify things, this commit moves them into the vacuumingOptions struct and removes the related function parameters. While at it, remove some redundant initialization code in vacuumdb's main() function. This is preparatory work for a follow-up commit that will add a --dry-run option to vacuumdb. Reviewed-by: Corey Huinker <corey.huinker@gmail.com> Reviewed-by: Kirill Reshke <reshkekirill@gmail.com> Reviewed-by: Chao Li <li.evan.chao@gmail.com> Discussion: https://postgr.es/m/CADkLM%3DckHkX7Of5SrK7g0LokPUwJ%3Dkk8JU1GXGF5pZ1eBVr0%3DQ%40mail.gmail.com
1 parent ab40db3 commit cf1450e

File tree

3 files changed

+36
-41
lines changed

3 files changed

+36
-41
lines changed

src/bin/scripts/vacuumdb.c

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,6 @@ main(int argc, char *argv[])
6868
const char *dbname = NULL;
6969
const char *maintenance_db = NULL;
7070
ConnParams cparams;
71-
bool echo = false;
72-
bool quiet = false;
7371
vacuumingOptions vacopts;
7472
SimpleStringList objects = {NULL, NULL};
7573
int concurrentCons = 1;
@@ -78,11 +76,7 @@ main(int argc, char *argv[])
7876

7977
/* initialize options */
8078
memset(&vacopts, 0, sizeof(vacopts));
81-
vacopts.objfilter = 0; /* no filter */
8279
vacopts.parallel_workers = -1;
83-
vacopts.buffer_usage_limit = NULL;
84-
vacopts.no_index_cleanup = false;
85-
vacopts.force_index_cleanup = false;
8680
vacopts.do_truncate = true;
8781
vacopts.process_main = true;
8882
vacopts.process_toast = true;
@@ -110,7 +104,7 @@ main(int argc, char *argv[])
110104
dbname = pg_strdup(optarg);
111105
break;
112106
case 'e':
113-
echo = true;
107+
vacopts.echo = true;
114108
break;
115109
case 'f':
116110
vacopts.full = true;
@@ -143,7 +137,7 @@ main(int argc, char *argv[])
143137
exit(1);
144138
break;
145139
case 'q':
146-
quiet = true;
140+
vacopts.quiet = true;
147141
break;
148142
case 't':
149143
vacopts.objfilter |= OBJFILTER_TABLE;
@@ -312,7 +306,7 @@ main(int argc, char *argv[])
312306
ret = vacuuming_main(&cparams, dbname, maintenance_db, &vacopts,
313307
&objects, tbl_count,
314308
concurrentCons,
315-
progname, echo, quiet);
309+
progname);
316310
exit(ret);
317311
}
318312

src/bin/scripts/vacuuming.c

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -30,21 +30,20 @@ static int vacuum_one_database(ConnParams *cparams,
3030
SimpleStringList *objects,
3131
SimpleStringList **found_objs,
3232
int concurrentCons,
33-
const char *progname, bool echo, bool quiet);
33+
const char *progname);
3434
static int vacuum_all_databases(ConnParams *cparams,
3535
vacuumingOptions *vacopts,
3636
SimpleStringList *objects,
3737
int concurrentCons,
38-
const char *progname, bool echo, bool quiet);
38+
const char *progname);
3939
static SimpleStringList *retrieve_objects(PGconn *conn,
4040
vacuumingOptions *vacopts,
41-
SimpleStringList *objects,
42-
bool echo);
41+
SimpleStringList *objects);
4342
static void free_retrieved_objects(SimpleStringList *list);
4443
static void prepare_vacuum_command(PGconn *conn, PQExpBuffer sql,
4544
vacuumingOptions *vacopts, const char *table);
46-
static void run_vacuum_command(PGconn *conn, const char *sql, bool echo,
47-
const char *table);
45+
static void run_vacuum_command(PGconn *conn, vacuumingOptions *vacopts,
46+
const char *sql, const char *table);
4847

4948
/*
5049
* Executes vacuum/analyze as indicated. Returns 0 if the plan is carried
@@ -56,7 +55,7 @@ vacuuming_main(ConnParams *cparams, const char *dbname,
5655
const char *maintenance_db, vacuumingOptions *vacopts,
5756
SimpleStringList *objects,
5857
unsigned int tbl_count, int concurrentCons,
59-
const char *progname, bool echo, bool quiet)
58+
const char *progname)
6059
{
6160
setup_cancel_handler(NULL);
6261

@@ -71,7 +70,7 @@ vacuuming_main(ConnParams *cparams, const char *dbname,
7170
return vacuum_all_databases(cparams, vacopts,
7271
objects,
7372
concurrentCons,
74-
progname, echo, quiet);
73+
progname);
7574
}
7675
else
7776
{
@@ -100,7 +99,7 @@ vacuuming_main(ConnParams *cparams, const char *dbname,
10099
objects,
101100
vacopts->missing_stats_only ? &found_objs : NULL,
102101
concurrentCons,
103-
progname, echo, quiet);
102+
progname);
104103
if (ret != 0)
105104
{
106105
free_retrieved_objects(found_objs);
@@ -116,7 +115,7 @@ vacuuming_main(ConnParams *cparams, const char *dbname,
116115
ANALYZE_NO_STAGE,
117116
objects, NULL,
118117
concurrentCons,
119-
progname, echo, quiet);
118+
progname);
120119
}
121120
}
122121

@@ -167,7 +166,7 @@ vacuum_one_database(ConnParams *cparams,
167166
SimpleStringList *objects,
168167
SimpleStringList **found_objs,
169168
int concurrentCons,
170-
const char *progname, bool echo, bool quiet)
169+
const char *progname)
171170
{
172171
PQExpBufferData sql;
173172
PGconn *conn;
@@ -192,7 +191,7 @@ vacuum_one_database(ConnParams *cparams,
192191
Assert(stage == ANALYZE_NO_STAGE ||
193192
(stage >= 0 && stage < ANALYZE_NUM_STAGES));
194193

195-
conn = connectDatabase(cparams, progname, echo, false, true);
194+
conn = connectDatabase(cparams, progname, vacopts->echo, false, true);
196195

197196
if (vacopts->disable_page_skipping && PQserverVersion(conn) < 90600)
198197
{
@@ -281,7 +280,7 @@ vacuum_one_database(ConnParams *cparams,
281280
/* skip_database_stats is used automatically if server supports it */
282281
vacopts->skip_database_stats = (PQserverVersion(conn) >= 160000);
283282

284-
if (!quiet)
283+
if (!vacopts->quiet)
285284
{
286285
if (vacopts->mode == MODE_ANALYZE_IN_STAGES)
287286
printf(_("%s: processing database \"%s\": %s\n"),
@@ -302,7 +301,7 @@ vacuum_one_database(ConnParams *cparams,
302301
retobjs = *found_objs;
303302
else
304303
{
305-
retobjs = retrieve_objects(conn, vacopts, objects, echo);
304+
retobjs = retrieve_objects(conn, vacopts, objects);
306305
if (found_objs)
307306
*found_objs = retobjs;
308307
else
@@ -341,7 +340,7 @@ vacuum_one_database(ConnParams *cparams,
341340
if (vacopts->mode == MODE_ANALYZE_IN_STAGES)
342341
{
343342
initcmd = stage_commands[stage];
344-
executeCommand(conn, initcmd, echo);
343+
executeCommand(conn, initcmd, vacopts->echo);
345344
}
346345
else
347346
initcmd = NULL;
@@ -351,7 +350,8 @@ vacuum_one_database(ConnParams *cparams,
351350
* for the first slot. If not in parallel mode, the first slot in the
352351
* array contains the connection.
353352
*/
354-
sa = ParallelSlotsSetup(concurrentCons, cparams, progname, echo, initcmd);
353+
sa = ParallelSlotsSetup(concurrentCons, cparams, progname,
354+
vacopts->echo, initcmd);
355355
ParallelSlotsAdoptConn(sa, conn);
356356

357357
initPQExpBuffer(&sql);
@@ -383,8 +383,7 @@ vacuum_one_database(ConnParams *cparams,
383383
* through ParallelSlotsGetIdle.
384384
*/
385385
ParallelSlotSetHandler(free_slot, TableCommandResultHandler, NULL);
386-
run_vacuum_command(free_slot->connection, sql.data,
387-
echo, tabname);
386+
run_vacuum_command(free_slot->connection, vacopts, sql.data, tabname);
388387

389388
cell = cell->next;
390389
} while (cell != NULL);
@@ -408,7 +407,7 @@ vacuum_one_database(ConnParams *cparams,
408407
}
409408

410409
ParallelSlotSetHandler(free_slot, TableCommandResultHandler, NULL);
411-
run_vacuum_command(free_slot->connection, cmd, echo, NULL);
410+
run_vacuum_command(free_slot->connection, vacopts, cmd, NULL);
412411

413412
if (!ParallelSlotsWaitCompletion(sa))
414413
ret = EXIT_FAILURE; /* error already reported by handler */
@@ -436,17 +435,17 @@ vacuum_all_databases(ConnParams *cparams,
436435
vacuumingOptions *vacopts,
437436
SimpleStringList *objects,
438437
int concurrentCons,
439-
const char *progname, bool echo, bool quiet)
438+
const char *progname)
440439
{
441440
int ret = EXIT_SUCCESS;
442441
PGconn *conn;
443442
PGresult *result;
444443
int numdbs;
445444

446-
conn = connectMaintenanceDatabase(cparams, progname, echo);
445+
conn = connectMaintenanceDatabase(cparams, progname, vacopts->echo);
447446
result = executeQuery(conn,
448447
"SELECT datname FROM pg_database WHERE datallowconn AND datconnlimit <> -2 ORDER BY 1;",
449-
echo);
448+
vacopts->echo);
450449
numdbs = PQntuples(result);
451450
PQfinish(conn);
452451

@@ -474,7 +473,7 @@ vacuum_all_databases(ConnParams *cparams,
474473
objects,
475474
vacopts->missing_stats_only ? &found_objs[i] : NULL,
476475
concurrentCons,
477-
progname, echo, quiet);
476+
progname);
478477
if (ret != EXIT_SUCCESS)
479478
break;
480479
}
@@ -499,7 +498,7 @@ vacuum_all_databases(ConnParams *cparams,
499498
objects,
500499
NULL,
501500
concurrentCons,
502-
progname, echo, quiet);
501+
progname);
503502
if (ret != EXIT_SUCCESS)
504503
break;
505504
}
@@ -524,7 +523,7 @@ vacuum_all_databases(ConnParams *cparams,
524523
*/
525524
static SimpleStringList *
526525
retrieve_objects(PGconn *conn, vacuumingOptions *vacopts,
527-
SimpleStringList *objects, bool echo)
526+
SimpleStringList *objects)
528527
{
529528
PQExpBufferData buf;
530529
PQExpBufferData catalog_query;
@@ -776,10 +775,10 @@ retrieve_objects(PGconn *conn, vacuumingOptions *vacopts,
776775
* query for consistency with table lookups done elsewhere by the user.
777776
*/
778777
appendPQExpBufferStr(&catalog_query, " ORDER BY c.relpages DESC;");
779-
executeCommand(conn, "RESET search_path;", echo);
780-
res = executeQuery(conn, catalog_query.data, echo);
778+
executeCommand(conn, "RESET search_path;", vacopts->echo);
779+
res = executeQuery(conn, catalog_query.data, vacopts->echo);
781780
termPQExpBuffer(&catalog_query);
782-
PQclear(executeQuery(conn, ALWAYS_SECURE_SEARCH_PATH_SQL, echo));
781+
PQclear(executeQuery(conn, ALWAYS_SECURE_SEARCH_PATH_SQL, vacopts->echo));
783782

784783
/*
785784
* Build qualified identifiers for each table, including the column list
@@ -1001,12 +1000,12 @@ prepare_vacuum_command(PGconn *conn, PQExpBuffer sql,
10011000
* Any errors during command execution are reported to stderr.
10021001
*/
10031002
static void
1004-
run_vacuum_command(PGconn *conn, const char *sql, bool echo,
1005-
const char *table)
1003+
run_vacuum_command(PGconn *conn, vacuumingOptions *vacopts,
1004+
const char *sql, const char *table)
10061005
{
10071006
bool status;
10081007

1009-
if (echo)
1008+
if (vacopts->echo)
10101009
printf("%s\n", sql);
10111010

10121011
status = PQsendQuery(conn, sql) == 1;

src/bin/scripts/vacuuming.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ typedef struct vacuumingOptions
5151
bool skip_database_stats;
5252
char *buffer_usage_limit;
5353
bool missing_stats_only;
54+
bool echo;
55+
bool quiet;
5456
} vacuumingOptions;
5557

5658
/* Valid values for vacuumingOptions->objfilter */
@@ -65,7 +67,7 @@ extern int vacuuming_main(ConnParams *cparams, const char *dbname,
6567
SimpleStringList *objects,
6668
unsigned int tbl_count,
6769
int concurrentCons,
68-
const char *progname, bool echo, bool quiet);
70+
const char *progname);
6971

7072
extern char *escape_quotes(const char *src);
7173

0 commit comments

Comments
 (0)