guc_tables.h 5.0 KB
Newer Older
1 2 3 4 5 6 7
/*-------------------------------------------------------------------------
 *
 * guc_tables.h
 *		Declarations of tables used by GUC.
 *
 * See src/backend/utils/misc/README for design notes.
 *
B
Bruce Momjian 已提交
8
 * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
9
 *
10
 *	  $PostgreSQL: pgsql/src/include/utils/guc_tables.h,v 1.9 2004/01/19 19:04:40 tgl Exp $
11 12 13 14 15 16 17
 *
 *-------------------------------------------------------------------------
 */
#ifndef GUC_TABLES
#define GUC_TABLES 1

/*
18
 * Groupings to help organize all the run-time options for display
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
 */
enum config_group
{
	UNGROUPED,
	CONN_AUTH,
	CONN_AUTH_SETTINGS,
	CONN_AUTH_SECURITY,
	RESOURCES,
	RESOURCES_MEM,
	RESOURCES_FSM,
	RESOURCES_KERNEL,
	WAL,
	WAL_SETTINGS,
	WAL_CHECKPOINTS,
	QUERY_TUNING,
	QUERY_TUNING_METHOD,
	QUERY_TUNING_COST,
	QUERY_TUNING_GEQO,
	QUERY_TUNING_OTHER,
	LOGGING,
	LOGGING_SYSLOG,
	LOGGING_WHEN,
	LOGGING_WHAT,
	STATS,
	STATS_MONITORING,
	STATS_COLLECTOR,
	CLIENT_CONN,
	CLIENT_CONN_STATEMENT,
	CLIENT_CONN_LOCALE,
	CLIENT_CONN_OTHER,
	LOCK_MANAGEMENT,
	COMPAT_OPTIONS,
	COMPAT_OPTIONS_PREVIOUS,
	COMPAT_OPTIONS_CLIENT,
53 54
	DEVELOPER_OPTIONS,
	COMPILE_OPTIONS
55 56 57 58 59 60 61
};

/*
 * GUC supports these types of variables:
 */
enum config_type
{
62 63 64 65
	PGC_BOOL,
	PGC_INT,
	PGC_REAL,
	PGC_STRING
66 67 68 69 70 71
};

/*
 * Generic fields applicable to all types of variables
 *
 * The short description should be less than 80 chars in length. Some
B
Bruce Momjian 已提交
72 73
 * applications may use the long description as well, and will append
 * it to the short description. (separated by a newline or '. ')
74 75 76 77 78 79
 */
struct config_generic
{
	/* constant fields, must be set correctly in initial value: */
	const char *name;			/* name of variable - MUST BE FIRST */
	GucContext	context;		/* context required to set the variable */
B
Bruce Momjian 已提交
80 81 82
	enum config_group group;	/* to help organize variables by function */
	const char *short_desc;		/* short desc. of this variable's purpose */
	const char *long_desc;		/* long desc. of this variable's purpose */
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
	int			flags;			/* flag bits, see below */
	/* variable fields, initialized at runtime: */
	enum config_type vartype;	/* type of variable (set only at startup) */
	int			status;			/* status bits, see below */
	GucSource	reset_source;	/* source of the reset_value */
	GucSource	session_source; /* source of the session_value */
	GucSource	tentative_source;		/* source of the tentative_value */
	GucSource	source;			/* source of the current actual value */
};

/* bit values in flags field */
#define GUC_LIST_INPUT			0x0001	/* input can be list format */
#define GUC_LIST_QUOTE			0x0002	/* double-quote list elements */
#define GUC_NO_SHOW_ALL			0x0004	/* exclude from SHOW ALL */
#define GUC_NO_RESET_ALL		0x0008	/* exclude from RESET ALL */
#define GUC_REPORT				0x0010	/* auto-report changes to client */
B
Bruce Momjian 已提交
99 100
#define GUC_NOT_IN_SAMPLE		0x0020	/* not in postgresql.conf.sample */
#define GUC_DISALLOW_IN_FILE	0x0040	/* can't set in postgresql.conf */
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115

/* bit values in status field */
#define GUC_HAVE_TENTATIVE	0x0001		/* tentative value is defined */
#define GUC_HAVE_LOCAL		0x0002		/* a SET LOCAL has been executed */


/* GUC records for specific variable types */

struct config_bool
{
	struct config_generic gen;
	/* these fields must be set correctly in initial value: */
	/* (all but reset_val are constants) */
	bool	   *variable;
	bool		reset_val;
116
	bool		(*assign_hook) (bool newval, bool doit, GucSource source);
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
	const char *(*show_hook) (void);
	/* variable fields, initialized at runtime: */
	bool		session_val;
	bool		tentative_val;
};

struct config_int
{
	struct config_generic gen;
	/* these fields must be set correctly in initial value: */
	/* (all but reset_val are constants) */
	int		   *variable;
	int			reset_val;
	int			min;
	int			max;
132
	bool		(*assign_hook) (int newval, bool doit, GucSource source);
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
	const char *(*show_hook) (void);
	/* variable fields, initialized at runtime: */
	int			session_val;
	int			tentative_val;
};

struct config_real
{
	struct config_generic gen;
	/* these fields must be set correctly in initial value: */
	/* (all but reset_val are constants) */
	double	   *variable;
	double		reset_val;
	double		min;
	double		max;
148
	bool		(*assign_hook) (double newval, bool doit, GucSource source);
149 150 151 152 153 154 155 156 157 158 159 160 161
	const char *(*show_hook) (void);
	/* variable fields, initialized at runtime: */
	double		session_val;
	double		tentative_val;
};

struct config_string
{
	struct config_generic gen;
	/* these fields must be set correctly in initial value: */
	/* (all are constants) */
	char	  **variable;
	const char *boot_val;
162
	const char *(*assign_hook) (const char *newval, bool doit, GucSource source);
163 164 165 166 167 168 169
	const char *(*show_hook) (void);
	/* variable fields, initialized at runtime: */
	char	   *reset_val;
	char	   *session_val;
	char	   *tentative_val;
};

170
/* constant tables corresponding to enums above and in guc.h */
B
Bruce Momjian 已提交
171 172 173 174
extern const char *const config_group_names[];
extern const char *const config_type_names[];
extern const char *const GucContext_Names[];
extern const char *const GucSource_Names[];
175 176

/* the current set of variables */
177 178 179 180 181 182
extern struct config_generic **guc_variables;
extern int	num_guc_variables;

extern void build_guc_variables(void);

#endif