mirror of
https://github.com/postgres/postgres.git
synced 2025-05-31 00:01:57 -04:00
>>ISTM that "source" is worth knowing. > > Hm, possibly. Any other opinions? This version has the seven fields I proposed, including "source". Here's an example that shows why I think it's valuable: regression=# \x Expanded display is on. regression=# select * from pg_settings where name = 'enable_seqscan'; -[ RECORD 1 ]----------- name | enable_seqscan setting | on context | user vartype | bool source | default min_val | max_val | regression=# update pg_settings set setting = 'off' where name = 'enable_seqscan'; -[ RECORD 1 ]--- set_config | off regression=# select * from pg_settings where name = 'enable_seqscan'; -[ RECORD 1 ]----------- name | enable_seqscan setting | off context | user vartype | bool source | session min_val | max_val | regression=# alter user postgres set enable_seqscan to 'off'; ALTER USER (log out and then back in again) regression=# \x Expanded display is on. regression=# select * from pg_settings where name = 'enable_seqscan'; -[ RECORD 1 ]----------- name | enable_seqscan setting | off context | user vartype | bool source | user min_val | max_val | In the first case, enable_seqscan is set to its default value. After setting it to off, it is obvious that the value has been changed for the session only. In the third case, you can see that the value has been set specifically for the user. Joe Conway
179 lines
4.9 KiB
C
179 lines
4.9 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* guc_tables.h
|
|
* Declarations of tables used by GUC.
|
|
*
|
|
* See src/backend/utils/misc/README for design notes.
|
|
*
|
|
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
|
|
*
|
|
* $Id: guc_tables.h,v 1.2 2003/07/27 04:35:54 momjian Exp $
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef GUC_TABLES
|
|
#define GUC_TABLES 1
|
|
|
|
/*
|
|
* Groupings to help organize all the run-time options for display.
|
|
*
|
|
* Keep this in sync with config_group_names[] in guc.c.
|
|
*/
|
|
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,
|
|
DEVELOPER_OPTIONS
|
|
};
|
|
|
|
|
|
/*
|
|
* GUC supports these types of variables:
|
|
*/
|
|
enum config_type
|
|
{
|
|
PGC_BOOL = 0,
|
|
PGC_INT = 1,
|
|
PGC_REAL = 2,
|
|
PGC_STRING = 3
|
|
};
|
|
|
|
/*
|
|
* Generic fields applicable to all types of variables
|
|
*
|
|
* The short description should be less than 80 chars in length. Some
|
|
* applications may use the long description as well, and will append
|
|
* it to the short description. (separated by a newline or '. ')
|
|
*/
|
|
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 */
|
|
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 */
|
|
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 */
|
|
#define GUC_NOT_IN_SAMPLE 0x0020 /* not in postgresql.conf.sample */
|
|
#define GUC_DISALLOW_IN_FILE 0x0040 /* can't set in postgresql.conf */
|
|
|
|
/* 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;
|
|
bool (*assign_hook) (bool newval, bool doit, bool interactive);
|
|
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;
|
|
bool (*assign_hook) (int newval, bool doit, bool interactive);
|
|
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;
|
|
bool (*assign_hook) (double newval, bool doit, bool interactive);
|
|
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;
|
|
const char *(*assign_hook) (const char *newval, bool doit, bool interactive);
|
|
const char *(*show_hook) (void);
|
|
/* variable fields, initialized at runtime: */
|
|
char *reset_val;
|
|
char *session_val;
|
|
char *tentative_val;
|
|
};
|
|
|
|
extern const char * const config_group_names[];
|
|
extern struct config_generic **guc_variables;
|
|
extern int num_guc_variables;
|
|
|
|
extern void build_guc_variables(void);
|
|
|
|
#endif
|