PostgreSQL Source Code git master
help_config.c
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 * help_config.c
3 *
4 * Displays available options under grand unified configuration scheme
5 *
6 * Options whose flag bits are set to GUC_NO_SHOW_ALL, GUC_NOT_IN_SAMPLE,
7 * or GUC_DISALLOW_IN_FILE are not displayed, unless the user specifically
8 * requests that variable by name
9 *
10 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
11 *
12 * IDENTIFICATION
13 * src/backend/utils/misc/help_config.c
14 *
15 *-------------------------------------------------------------------------
16 */
17#include "postgres.h"
18
19#include <limits.h>
20#include <unistd.h>
21
22#include "utils/guc_tables.h"
23#include "utils/help_config.h"
24
25
26/*
27 * This union allows us to mix the numerous different types of structs
28 * that we are organizing.
29 */
30typedef union
31{
32 struct config_generic generic;
33 struct config_bool _bool;
34 struct config_real real;
35 struct config_int integer;
37 struct config_enum _enum;
39
40
41static void printMixedStruct(mixedStruct *structToPrint);
42static bool displayStruct(mixedStruct *structToDisplay);
43
44
45void
47{
48 struct config_generic **guc_vars;
49 int numOpts,
50 i;
51
52 /* Initialize the GUC hash table */
54
55 guc_vars = get_guc_variables(&numOpts);
56
57 for (i = 0; i < numOpts; i++)
58 {
59 mixedStruct *var = (mixedStruct *) guc_vars[i];
60
61 if (displayStruct(var))
63 }
64
65 exit(0);
66}
67
68
69/*
70 * This function will return true if the struct passed to it
71 * should be displayed to the user.
72 */
73static bool
74displayStruct(mixedStruct *structToDisplay)
75{
76 return !(structToDisplay->generic.flags & (GUC_NO_SHOW_ALL |
79}
80
81
82/*
83 * This function prints out the generic struct passed to it. It will print out
84 * a different format, depending on what the user wants to see.
85 */
86static void
88{
89 printf("%s\t%s\t%s\t",
90 structToPrint->generic.name,
91 GucContext_Names[structToPrint->generic.context],
92 _(config_group_names[structToPrint->generic.group]));
93
94 switch (structToPrint->generic.vartype)
95 {
96
97 case PGC_BOOL:
98 printf("BOOLEAN\t%s\t\t\t",
99 (structToPrint->_bool.reset_val == 0) ?
100 "FALSE" : "TRUE");
101 break;
102
103 case PGC_INT:
104 printf("INTEGER\t%d\t%d\t%d\t",
105 structToPrint->integer.reset_val,
106 structToPrint->integer.min,
107 structToPrint->integer.max);
108 break;
109
110 case PGC_REAL:
111 printf("REAL\t%g\t%g\t%g\t",
112 structToPrint->real.reset_val,
113 structToPrint->real.min,
114 structToPrint->real.max);
115 break;
116
117 case PGC_STRING:
118 printf("STRING\t%s\t\t\t",
119 structToPrint->string.boot_val ? structToPrint->string.boot_val : "");
120 break;
121
122 case PGC_ENUM:
123 printf("ENUM\t%s\t\t\t",
124 config_enum_lookup_by_value(&structToPrint->_enum,
125 structToPrint->_enum.boot_val));
126 break;
127
128 default:
129 write_stderr("internal error: unrecognized run-time parameter type\n");
130 break;
131 }
132
133 printf("%s\t%s\n",
134 (structToPrint->generic.short_desc == NULL) ? "" : _(structToPrint->generic.short_desc),
135 (structToPrint->generic.long_desc == NULL) ? "" : _(structToPrint->generic.long_desc));
136}
#define write_stderr(str)
Definition: parallel.c:186
#define _(x)
Definition: elog.c:90
struct config_generic ** get_guc_variables(int *num_vars)
Definition: guc.c:872
const char * config_enum_lookup_by_value(struct config_enum *record, int val)
Definition: guc.c:3023
void build_guc_variables(void)
Definition: guc.c:903
#define GUC_DISALLOW_IN_FILE
Definition: guc.h:222
#define GUC_NO_SHOW_ALL
Definition: guc.h:216
#define GUC_NOT_IN_SAMPLE
Definition: guc.h:221
const char *const GucContext_Names[]
Definition: guc_tables.c:630
const char *const config_group_names[]
Definition: guc_tables.c:673
@ PGC_BOOL
Definition: guc_tables.h:25
@ PGC_STRING
Definition: guc_tables.h:28
@ PGC_ENUM
Definition: guc_tables.h:29
@ PGC_REAL
Definition: guc_tables.h:27
@ PGC_INT
Definition: guc_tables.h:26
static void printMixedStruct(mixedStruct *structToPrint)
Definition: help_config.c:87
void GucInfoMain(void)
Definition: help_config.c:46
static bool displayStruct(mixedStruct *structToDisplay)
Definition: help_config.c:74
int i
Definition: isn.c:72
exit(1)
#define printf(...)
Definition: port.h:245
char string[11]
Definition: preproc-type.c:52
bool reset_val
Definition: guc_tables.h:210
enum config_group group
Definition: guc_tables.h:160
GucContext context
Definition: guc_tables.h:159
const char * long_desc
Definition: guc_tables.h:162
const char * name
Definition: guc_tables.h:158
const char * short_desc
Definition: guc_tables.h:161
enum config_type vartype
Definition: guc_tables.h:165
int reset_val
Definition: guc_tables.h:226
double reset_val
Definition: guc_tables.h:242
double min
Definition: guc_tables.h:236
double max
Definition: guc_tables.h:237
const char * boot_val
Definition: guc_tables.h:261
struct config_enum _enum
Definition: help_config.c:37
struct config_int integer
Definition: help_config.c:35
struct config_generic generic
Definition: help_config.c:32
struct config_bool _bool
Definition: help_config.c:33
struct config_real real
Definition: help_config.c:34
struct config_string string
Definition: help_config.c:36