? build ? src/backend/utils/misc/pg_guc.c ? src/include/utils/guc_vars.h ? src/include/utils/pg_guc.h Index: src/backend/nls.mk =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/backend/nls.mk,v retrieving revision 1.4 diff -c -p -r1.4 nls.mk *** src/backend/nls.mk 28 Jun 2003 22:30:59 -0000 1.4 --- src/backend/nls.mk 30 Jun 2003 19:18:41 -0000 *************** *** 2,8 **** CATALOG_NAME := postgres AVAIL_LANGUAGES := cs de es hr hu ru sv tr zh_CN zh_TW GETTEXT_FILES := + gettext-files ! GETTEXT_TRIGGERS:= elog:2 postmaster_error yyerror gettext-files: find $(srcdir)/ -name '*.c' -print >$@ --- 2,8 ---- CATALOG_NAME := postgres AVAIL_LANGUAGES := cs de es hr hu ru sv tr zh_CN zh_TW GETTEXT_FILES := + gettext-files ! GETTEXT_TRIGGERS:= elog:2 postmaster_error yyerror translatable gettext-files: find $(srcdir)/ -name '*.c' -print >$@ Index: src/backend/main/main.c =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/backend/main/main.c,v retrieving revision 1.57 diff -c -p -r1.57 main.c *** src/backend/main/main.c 15 May 2003 16:35:28 -0000 1.57 --- src/backend/main/main.c 30 Jun 2003 19:18:41 -0000 *************** main(int argc, char *argv[]) *** 203,210 **** * argument) we were called with. The lack of consistency here is * historical. */ - len = strlen(new_argv[0]); if (len >= 10 && strcmp(new_argv[0] + len - 10, "postmaster") == 0) { /* Called as "postmaster" */ --- 203,220 ---- * argument) we were called with. The lack of consistency here is * historical. */ + /* + * If the first argument is "--long-help", then invoke display details + * about all available runtime configuration options. + * We remove "--long-help" from the arguments passed on to GucInfoMain. + */ + if (argc > 1 && strcmp(new_argv[1], "--long-help") == 0) + { + exit(GucInfoMain(argc - 1, new_argv + 1)); + } + + len = strlen(new_argv[0]); if (len >= 10 && strcmp(new_argv[0] + len - 10, "postmaster") == 0) { /* Called as "postmaster" */ Index: src/backend/postmaster/postmaster.c =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/backend/postmaster/postmaster.c,v retrieving revision 1.333 diff -c -p -r1.333 postmaster.c *** src/backend/postmaster/postmaster.c 12 Jun 2003 07:36:51 -0000 1.333 --- src/backend/postmaster/postmaster.c 30 Jun 2003 19:18:42 -0000 *************** usage(const char *progname) *** 961,966 **** --- 961,967 ---- printf(gettext(" -o OPTIONS pass 'OPTIONS' to each backend server\n")); printf(gettext(" -p PORT port number to listen on\n")); printf(gettext(" -S silent mode (start in background without logging output)\n")); + printf(gettext(" --long-help List runtime options, then exit. Details: --long-help -h\n")); printf(gettext(" --help show this help, then exit\n")); printf(gettext(" --version output version information, then exit\n")); Index: src/backend/utils/misc/Makefile =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/backend/utils/misc/Makefile,v retrieving revision 1.20 diff -c -p -r1.20 Makefile *** src/backend/utils/misc/Makefile 1 Nov 2002 22:52:33 -0000 1.20 --- src/backend/utils/misc/Makefile 30 Jun 2003 19:18:42 -0000 *************** include $(top_builddir)/src/Makefile.glo *** 6,12 **** override CPPFLAGS := -I$(srcdir) $(CPPFLAGS) ! OBJS = database.o superuser.o guc.o ps_status.o # This location might depend on the installation directories. Therefore # we can't subsitute it into config.h. --- 6,12 ---- override CPPFLAGS := -I$(srcdir) $(CPPFLAGS) ! OBJS = database.o superuser.o guc.o ps_status.o pg_guc.o # This location might depend on the installation directories. Therefore # we can't subsitute it into config.h. Index: src/backend/utils/misc/guc.c =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/backend/utils/misc/guc.c,v retrieving revision 1.132 diff -c -p -r1.132 guc.c *** src/backend/utils/misc/guc.c 27 Jun 2003 19:08:38 -0000 1.132 --- src/backend/utils/misc/guc.c 30 Jun 2003 19:18:44 -0000 *************** *** 15,20 **** --- 15,26 ---- *-------------------------------------------------------------------- */ + /* + * The translatable macro is used to mark string literals for translation + * by the gettext system + */ + #define translatable(x) (x) + #include "postgres.h" #include *************** static char *XactIsoLevel_string; *** 154,261 **** /* * Declarations for GUC tables * * See src/backend/utils/misc/README for design notes. */ ! enum config_type ! { ! PGC_BOOL, ! PGC_INT, ! PGC_REAL, ! PGC_STRING ! }; ! ! /* Generic fields applicable to all types of variables */ ! 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 */ ! 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 */ ! ! /* 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; ! }; /* Macros for freeing malloc'd pointers only if appropriate to do so */ /* Some of these tests are probably redundant, but be safe ... */ --- 160,211 ---- /* + * The display name for each of the groupings defined in enum config_group + * This array needs to be kept in sync with enum config_group. + * This array however needs to be NULL terminated. + */ + char *config_group_names [] = { + translatable("Ungrouped"), + translatable("Connections & Authentication"), + translatable("Connections & Authentication / Connection Settings"), + translatable("Connections & Authentication / Security & Authentication"), + translatable("Resource Usage"), + translatable("Resource Usage / Memory"), + translatable("Resource Usage / Free Space Map"), + translatable("Resource Usage / Disk Usage"), + translatable("Write Ahead Log"), + translatable("Write Ahead Log / Settings"), + translatable("Write Ahead Log / Checkpoints"), + translatable("Query Tuning"), + translatable("Query Tuning / Planner Method Enabling"), + translatable("Query Tuning / Planner Cost Constants"), + translatable("Query Tuning / Genetic Estimate Query Optimizer"), + translatable("Query Tuning / Other Query Modifiers"), + translatable("Client Connection Defaults"), + translatable("Client Connection Defaults / Statement Behaviour"), + translatable("Client Connection Defaults / Locale and Formatting"), + translatable("Client Connection Defaults / Other Defaults"), + translatable("Logging & Debugging"), + translatable("Logging & Debugging / When To Log"), + translatable("Logging & Debugging / What To Log"), + translatable("Logging & Debugging / Syslog"), + translatable("Statistics"), + translatable("Statistics / Monitoring"), + translatable("Statistics / Query & Index Statistics Collector"), + translatable("Lock Management"), + translatable("Version & Platform Compatibility"), + translatable("Version & Platform Compatibility / Previous Postgres Versions"), + translatable("Version & Platform Compatibility / Platform & Client"), + translatable("Source Developer Options"), + NULL + }; + + /* * Declarations for GUC tables * * See src/backend/utils/misc/README for design notes. */ ! #include "utils/guc_vars.h" /* Macros for freeing malloc'd pointers only if appropriate to do so */ /* Some of these tests are probably redundant, but be safe ... */ *************** struct config_string *** 322,621 **** /******** option records follow ********/ ! static struct config_bool ConfigureNamesBool[] = { { ! {"enable_seqscan", PGC_USERSET}, &enable_seqscan, ! true, NULL, NULL ! }, ! { ! {"enable_indexscan", PGC_USERSET}, &enable_indexscan, ! true, NULL, NULL ! }, ! { ! {"enable_tidscan", PGC_USERSET}, &enable_tidscan, ! true, NULL, NULL ! }, ! { ! {"enable_sort", PGC_USERSET}, &enable_sort, ! true, NULL, NULL ! }, ! { ! {"enable_hashagg", PGC_USERSET}, &enable_hashagg, ! true, NULL, NULL ! }, ! { ! {"enable_nestloop", PGC_USERSET}, &enable_nestloop, ! true, NULL, NULL }, { ! {"enable_mergejoin", PGC_USERSET}, &enable_mergejoin, ! true, NULL, NULL }, { ! {"enable_hashjoin", PGC_USERSET}, &enable_hashjoin, ! true, NULL, NULL }, { ! {"geqo", PGC_USERSET}, &enable_geqo, ! true, NULL, NULL }, - - /* Not for general use --- used by SET SESSION AUTHORIZATION */ { ! {"is_superuser", PGC_INTERNAL, GUC_REPORT | GUC_NO_SHOW_ALL | GUC_NO_RESET_ALL}, ! &session_auth_is_superuser, ! false, NULL, NULL }, - { ! {"tcpip_socket", PGC_POSTMASTER}, &NetServer, ! false, NULL, NULL }, { ! {"ssl", PGC_POSTMASTER}, &EnableSSL, ! false, NULL, NULL }, ! { ! {"fsync", PGC_SIGHUP}, &enableFsync, ! true, NULL, NULL }, { ! {"zero_damaged_pages", PGC_SUSET}, &zero_damaged_pages, ! false, NULL, NULL }, { ! {"silent_mode", PGC_POSTMASTER}, &SilentMode, ! false, NULL, NULL ! }, ! ! { ! {"log_connections", PGC_BACKEND}, &Log_connections, ! false, NULL, NULL ! }, ! { ! {"log_timestamp", PGC_SIGHUP}, &Log_timestamp, ! false, NULL, NULL }, { ! {"log_pid", PGC_SIGHUP}, &Log_pid, ! false, NULL, NULL }, #ifdef USE_ASSERT_CHECKING { ! {"debug_assertions", PGC_USERSET}, &assert_enabled, ! true, NULL, NULL }, #endif ! { /* currently undocumented, so don't show in SHOW ALL */ ! {"exit_on_error", PGC_USERSET, GUC_NO_SHOW_ALL}, &ExitOnAnyError, ! false, NULL, NULL ! }, ! { ! {"log_statement", PGC_SUSET}, &log_statement, ! false, NULL, NULL }, { ! {"log_duration", PGC_SUSET}, &log_duration, ! false, NULL, NULL }, { ! {"debug_print_parse", PGC_USERSET}, &Debug_print_parse, ! false, NULL, NULL }, { ! {"debug_print_rewritten", PGC_USERSET}, &Debug_print_rewritten, ! false, NULL, NULL }, { ! {"debug_print_plan", PGC_USERSET}, &Debug_print_plan, ! false, NULL, NULL }, { ! {"debug_pretty_print", PGC_USERSET}, &Debug_pretty_print, ! false, NULL, NULL }, { ! {"log_parser_stats", PGC_SUSET}, &log_parser_stats, ! false, NULL, NULL }, { ! {"log_planner_stats", PGC_SUSET}, &log_planner_stats, ! false, NULL, NULL }, { ! {"log_executor_stats", PGC_SUSET}, &log_executor_stats, ! false, NULL, NULL }, { ! {"log_statement_stats", PGC_SUSET}, &log_statement_stats, ! false, NULL, NULL }, #ifdef BTREE_BUILD_STATS { ! {"log_btree_build_stats", PGC_SUSET}, &log_btree_build_stats, ! false, NULL, NULL }, #endif { ! {"explain_pretty_print", PGC_USERSET}, &Explain_pretty_print, ! true, NULL, NULL }, { ! {"stats_start_collector", PGC_POSTMASTER}, &pgstat_collect_startcollector, ! true, NULL, NULL }, { ! {"stats_reset_on_server_start", PGC_POSTMASTER}, &pgstat_collect_resetonpmstart, ! true, NULL, NULL }, { ! {"stats_command_string", PGC_SUSET}, &pgstat_collect_querystring, ! false, NULL, NULL }, { ! {"stats_row_level", PGC_SUSET}, &pgstat_collect_tuplelevel, ! false, NULL, NULL }, { ! {"stats_block_level", PGC_SUSET}, &pgstat_collect_blocklevel, ! false, NULL, NULL }, { ! {"trace_notify", PGC_USERSET}, &Trace_notify, ! false, NULL, NULL }, #ifdef LOCK_DEBUG { ! {"trace_locks", PGC_SUSET}, &Trace_locks, ! false, NULL, NULL ! }, ! { ! {"trace_userlocks", PGC_SUSET}, &Trace_userlocks, ! false, NULL, NULL ! }, ! { ! {"trace_lwlocks", PGC_SUSET}, &Trace_lwlocks, ! false, NULL, NULL ! }, ! { ! {"debug_deadlocks", PGC_SUSET}, &Debug_deadlocks, ! false, NULL, NULL }, #endif { ! {"log_hostname", PGC_SIGHUP}, &log_hostname, ! false, NULL, NULL ! }, ! { ! {"log_source_port", PGC_SIGHUP}, &LogSourcePort, ! false, NULL, NULL }, { ! {"sql_inheritance", PGC_USERSET}, &SQL_inheritance, ! true, NULL, NULL ! }, ! { ! {"australian_timezones", PGC_USERSET}, &Australian_timezones, ! false, ClearDateCache, NULL ! }, ! { ! {"password_encryption", PGC_USERSET}, &Password_encryption, ! true, NULL, NULL ! }, ! { ! {"transform_null_equals", PGC_USERSET}, &Transform_null_equals, ! false, NULL, NULL ! }, ! { ! {"db_user_namespace", PGC_SIGHUP}, &Db_user_namespace, ! false, NULL, NULL }, { /* * This var doesn't do anything; it's just here so that we won't * choke on SET AUTOCOMMIT TO ON from 7.3-vintage clients. ! */ ! {"autocommit", PGC_USERSET, GUC_NO_SHOW_ALL}, &phony_autocommit, ! true, assign_phony_autocommit, NULL ! }, ! { ! {"default_transaction_read_only", PGC_USERSET}, &DefaultXactReadOnly, ! false, NULL, NULL ! }, ! { ! {"transaction_read_only", PGC_USERSET, GUC_NO_RESET_ALL}, &XactReadOnly, ! false, NULL, NULL ! }, ! { ! {"add_missing_from", PGC_USERSET}, &add_missing_from, ! true, NULL, NULL }, /* End-of-list marker */ { ! {NULL, 0}, NULL, false, NULL, NULL ! }, }; ! static struct config_int ConfigureNamesInt[] = { { ! {"default_statistics_target", PGC_USERSET}, &default_statistics_target, ! 10, 1, 1000, NULL, NULL ! }, ! { ! {"from_collapse_limit", PGC_USERSET}, &from_collapse_limit, ! 8, 1, INT_MAX, NULL, NULL ! }, ! { ! {"join_collapse_limit", PGC_USERSET}, &join_collapse_limit, ! 8, 1, INT_MAX, NULL, NULL ! }, ! { ! {"geqo_threshold", PGC_USERSET}, &geqo_threshold, ! 11, 2, INT_MAX, NULL, NULL ! }, ! { ! {"geqo_pool_size", PGC_USERSET}, &Geqo_pool_size, ! DEFAULT_GEQO_POOL_SIZE, 0, MAX_GEQO_POOL_SIZE, NULL, NULL ! }, ! { ! {"geqo_effort", PGC_USERSET}, &Geqo_effort, ! 1, 1, INT_MAX, NULL, NULL ! }, ! { ! {"geqo_generations", PGC_USERSET}, &Geqo_generations, ! 0, 0, INT_MAX, NULL, NULL ! }, ! { ! {"geqo_random_seed", PGC_USERSET}, &Geqo_random_seed, ! -1, INT_MIN, INT_MAX, NULL, NULL ! }, ! ! { ! {"deadlock_timeout", PGC_SIGHUP}, &DeadlockTimeout, ! 1000, 0, INT_MAX, NULL, NULL }, #ifdef HAVE_SYSLOG { ! {"syslog", PGC_SIGHUP}, &Use_syslog, ! 0, 0, 2, NULL, NULL }, #endif --- 272,780 ---- /******** option records follow ********/ ! struct config_bool ConfigureNamesBool[] = { { ! {"enable_seqscan", PGC_USERSET, QUERY_TUNING_METHOD, ! translatable("Enable Query Planner's use of seq. scan plan types"), ! NULL ! }, ! &enable_seqscan, true, NULL, NULL }, { ! {"enable_indexscan", PGC_USERSET, QUERY_TUNING_METHOD, ! translatable("Enable Query Planner's use of index-scan plan types"), ! NULL ! }, ! &enable_indexscan, true, NULL, NULL }, { ! {"enable_tidscan", PGC_USERSET, QUERY_TUNING_METHOD, ! translatable("Enable Query Planner's use of TID scan plan types"), ! NULL ! }, ! &enable_tidscan, true, NULL, NULL }, { ! {"enable_sort", PGC_USERSET, QUERY_TUNING_METHOD, ! translatable("Enable Query Planner's use of explicit sort steps"), ! NULL ! }, ! &enable_sort, true, NULL, NULL }, { ! {"enable_hashagg", PGC_USERSET, QUERY_TUNING_METHOD, ! translatable("Enable Planner's use of hashed aggregation plan types"), ! NULL ! }, ! &enable_hashagg, true, NULL, NULL }, { ! {"enable_nestloop", PGC_USERSET, QUERY_TUNING_METHOD, ! translatable("Enable Query Planner's use of nested-loop join plans"), ! NULL ! }, ! &enable_nestloop, true, NULL, NULL }, { ! {"enable_mergejoin", PGC_USERSET, QUERY_TUNING_METHOD, ! translatable("Enable Query Planner's use of merge-join plan types"), ! NULL }, ! &enable_mergejoin, true, NULL, NULL }, { ! {"enable_hashjoin", PGC_USERSET, QUERY_TUNING_METHOD, ! translatable("Enable Query Planner's use of hash-join plan types"), ! NULL ! }, ! &enable_hashjoin, true, NULL, NULL }, { ! {"geqo", PGC_USERSET, QUERY_TUNING_GEQO, ! translatable("Enable genetic query optimization"), ! translatable("This algorithm attempts to do query planning without " ! "exhaustive searching") ! }, ! &enable_geqo, true, NULL, NULL }, + /* Not for general use --- used by SET SESSION AUTHORIZATION */ { ! {"is_superuser", PGC_INTERNAL, DEVELOPER_OPTIONS, ! translatable("Used by SET SESSION AUTHORIZATION"), ! NULL, ! GUC_REPORT | GUC_NO_SHOW_ALL | GUC_NO_RESET_ALL | NOT_IN_SAMPLE_CONF ! }, ! &session_auth_is_superuser, false, NULL, NULL ! }, ! { ! {"tcpip_socket", PGC_POSTMASTER, CONN_AUTH_SETTINGS, ! translatable("Accept TCP/IP connections"), NULL ! }, ! &NetServer, false, NULL, NULL ! }, ! { ! {"ssl", PGC_POSTMASTER, CONN_AUTH_SECURITY, ! translatable("Enables SSL connections"), NULL ! }, ! &EnableSSL, false, NULL, NULL ! }, ! { ! {"fsync", PGC_SIGHUP, WAL_SETTINGS, ! translatable("If on, server physically writes updates to disk"), ! translatable("It will use the fsync() system call in several places to make " ! "sure that updates are physically written to disk. This insures " ! "that a database cluster will recover to a consistent state after " ! "an operating system or hardware crash") ! }, ! &enableFsync, true, NULL, NULL ! }, ! { ! {"zero_damaged_pages", PGC_SUSET, DEVELOPER_OPTIONS, ! translatable("Continues processing past damaged page headers"), ! translatable("Detection of a damaged page header normally causes PostgreSQL to " ! "report an error, aborting the current transaction. Setting " ! "zero_damaged_pages to true causes the system to instead report a " ! "warning, zero out the damaged page, and continue processing. This " ! "behavior will destroy data, namely all the rows on the damaged page."), ! NOT_IN_SAMPLE_CONF | DISALLOW_IN_CONF_FILE ! }, ! &zero_damaged_pages, false, NULL, NULL ! }, ! { ! {"silent_mode", PGC_POSTMASTER, LOG_DEBUG_WHEN, ! translatable("Runs the server silently"), ! translatable("If this option is set, the server will automatically run in the" ! "background and any controlling terminals are disassociated") ! }, ! &SilentMode, false, NULL, NULL ! }, ! ! { ! {"log_connections", PGC_BACKEND, LOG_DEBUG_WHAT, ! translatable("Logs each successful connection"), NULL ! }, ! &Log_connections, false, NULL, NULL ! }, ! { ! {"log_timestamp", PGC_SIGHUP, LOG_DEBUG_WHAT, ! translatable("Prefixes server log messages with a time stamp"), NULL ! }, ! &Log_timestamp, false, NULL, NULL ! }, ! { ! {"log_pid", PGC_SIGHUP, LOG_DEBUG_WHAT, ! translatable("Prefixes server log messages with the server PID"), NULL ! }, ! &Log_pid, false, NULL, NULL }, #ifdef USE_ASSERT_CHECKING { ! {"debug_assertions", PGC_USERSET, DEVELOPER_OPTIONS, ! translatable("Turns on various assertion checks"), ! translatable("This is a debugging aid. To use this option, the macro " ! "USE_ASSERT_CHECKING must be defined when PostgreSQL is built " ! "(accomplished by the configure option --enable-cassert)"), ! NOT_IN_SAMPLE_CONF ! }, ! &assert_enabled, true, NULL, NULL }, #endif ! { /* currently undocumented, so don't show in SHOW ALL */ ! {"exit_on_error", PGC_USERSET, UNGROUPED, ! translatable("No Description Available"), NULL, ! GUC_NO_SHOW_ALL | NOT_IN_SAMPLE_CONF ! }, ! &ExitOnAnyError, false, NULL, NULL ! }, { ! {"log_statement", PGC_SUSET, LOG_DEBUG_WHAT, ! translatable("Causes each SQL statement to be logged"), NULL ! }, ! &log_statement, false, NULL, NULL }, { ! {"log_duration", PGC_SUSET, LOG_DEBUG_WHAT, ! translatable("Duration of every completed statement is logged"), NULL ! }, ! &log_duration, false, NULL, NULL }, { ! {"debug_print_parse", PGC_USERSET, LOG_DEBUG_WHAT, ! translatable("Parse tree printed to server logs"), ! translatable("Parsed for each executed query") ! }, ! &Debug_print_parse, false, NULL, NULL }, { ! {"debug_print_rewritten", PGC_USERSET, LOG_DEBUG_WHAT, ! translatable("Prints query rewriter output to server log"), NULL ! }, ! &Debug_print_rewritten, false, NULL, NULL }, { ! {"debug_print_plan", PGC_USERSET, LOG_DEBUG_WHAT, ! translatable("Prints execution plan to the server log"), NULL ! }, ! &Debug_print_plan, false, NULL, NULL }, { ! {"debug_pretty_print", PGC_USERSET, LOG_DEBUG_WHAT, ! translatable("Indents displays from parse, rewritten and plan"), NULL ! }, ! &Debug_pretty_print, false, NULL, NULL }, { ! {"log_parser_stats", PGC_SUSET, STATS_MONITORING, ! translatable("Write parser performance stats to server log"), NULL ! }, ! &log_parser_stats, false, NULL, NULL }, { ! {"log_planner_stats", PGC_SUSET, STATS_MONITORING, ! translatable("Write planner performance stats to server log"), NULL ! }, ! &log_planner_stats, false, NULL, NULL }, { ! {"log_executor_stats", PGC_SUSET, STATS_MONITORING, ! translatable("Write executor performance stats to server log"), NULL ! }, ! &log_executor_stats,false, NULL, NULL }, { ! {"log_statement_stats", PGC_SUSET, STATS_MONITORING, ! translatable("Write statement performance stats to server log"), NULL ! }, ! &log_statement_stats, false, NULL, NULL }, #ifdef BTREE_BUILD_STATS { ! {"log_btree_build_stats", PGC_SUSET, UNGROUPED, ! translatable("No Description Available"), NULL, ! NOT_IN_SAMPLE_CONF ! }, ! &log_btree_build_stats, false, NULL, NULL }, #endif { ! {"explain_pretty_print", PGC_USERSET, QUERY_TUNING_OTHER, ! translatable("Use indented output format for EXPLAIN VERBOSE"), NULL ! }, ! &Explain_pretty_print, true, NULL, NULL }, { ! {"stats_start_collector", PGC_POSTMASTER, STATS_QUERY, ! translatable("Start server statistics-collection subprocess"), NULL ! }, ! &pgstat_collect_startcollector, true, NULL, NULL }, { ! {"stats_reset_on_server_start", PGC_POSTMASTER, STATS_QUERY, ! translatable("Collected statistics zeroed out on server restart"), NULL ! }, ! &pgstat_collect_resetonpmstart, true, NULL, NULL }, { ! {"stats_command_string", PGC_SUSET, STATS_QUERY, ! translatable("Enable stat collection on executing commands"), ! translatable("Enables the collection of statistics on the currently " ! "executing command of each session, along with the time " ! "at which that command began execution.") ! }, ! &pgstat_collect_querystring, false, NULL, NULL }, { ! {"stats_row_level", PGC_SUSET, STATS_QUERY, ! translatable("Enable collection of row-level stats on db activity"), ! NULL ! }, ! &pgstat_collect_tuplelevel, false, NULL, NULL }, { ! {"stats_block_level", PGC_SUSET, STATS_QUERY, ! translatable("Enables collection of block-level stats on db activity"), ! NULL ! }, ! &pgstat_collect_blocklevel, false, NULL, NULL }, { ! {"trace_notify", PGC_USERSET, DEVELOPER_OPTIONS, ! translatable("Generates debugging output for LISTEN and NOTIFY"), ! NULL, ! NOT_IN_SAMPLE_CONF ! }, ! &Trace_notify, false, NULL, NULL }, #ifdef LOCK_DEBUG { ! {"trace_locks", PGC_SUSET, DEVELOPER_OPTIONS, ! translatable("No Description Available"), NULL, ! NOT_IN_SAMPLE_CONF ! }, ! &Trace_locks, false, NULL, NULL ! }, ! { ! {"trace_userlocks", PGC_SUSET, DEVELOPER_OPTIONS, ! translatable("No Description Available"), NULL, ! NOT_IN_SAMPLE_CONF ! }, ! &Trace_userlocks, false, NULL, NULL ! }, ! { ! {"trace_lwlocks", PGC_SUSET, UNGROUPED, ! translatable("No Description Available"), NULL, ! NOT_IN_SAMPLE_CONF ! }, ! &Trace_lwlocks, false, NULL, NULL ! }, ! { ! {"debug_deadlocks", PGC_SUSET, DEVELOPER_OPTIONS, ! translatable("No Description Available"), NULL, ! NOT_IN_SAMPLE_CONF ! }, ! &Debug_deadlocks, false, NULL, NULL }, #endif { ! {"log_hostname", PGC_SIGHUP, LOG_DEBUG_WHAT, ! translatable("Log hostname to connection logs"), ! translatable("By default, connection logs only show the IP address " ! "of the connecting host. If you want them to show the host name you " ! "can turn this on, but depending on your host name resolution " ! "setup it might impose a non-negligible performance penalty") ! }, ! &log_hostname, false, NULL, NULL ! }, ! { ! {"log_source_port", PGC_SIGHUP, LOG_DEBUG_WHAT, ! translatable("Log outgoing port number of the connecting host"), NULL ! }, ! &LogSourcePort, false, NULL, NULL }, { ! {"sql_inheritance", PGC_USERSET, COMPAT_OPTIONS_PREVIOUS, ! translatable("This controls the inheritance semantics"), ! translatable("In particular, whether subtables are included by " ! "various commands by default") ! }, ! &SQL_inheritance, true, NULL, NULL ! }, ! { ! {"australian_timezones", PGC_USERSET, CLIENT_CONN_LOCALE, ! translatable("If true, ACST, CST, EST, and SAT are interpreted " ! "as Australian time zones"), ! translatable("Otherwise they are interpreted as North/South American " ! "time zones and Saturday") ! }, ! &Australian_timezones, false, ClearDateCache, NULL ! }, ! { ! {"password_encryption", PGC_USERSET, CLIENT_CONN_OTHER, ! translatable("If unspecified the password is encrypted"), ! translatable("When a password is specified in CREATE USER or " ! "ALTER USER without writing either ENCRYPTED or UNENCRYPTED, " ! "this option determines whether the password is to be encrypted") ! }, ! &Password_encryption, true, NULL, NULL ! }, ! { ! {"transform_null_equals", PGC_USERSET, COMPAT_OPTIONS_CLIENT, ! translatable("expr=NULL treated as expr IS NULL"), ! translatable("When turned on, expressions of the form expr = NULL " ! "(or NULL = expr) are treated as expr IS NULL, that is, they " ! "return true if expr evaluates to the null value, and false " ! "otherwise. The correct behavior of expr = NULL is to always " ! "return null (unknown)") ! }, ! &Transform_null_equals, false, NULL, NULL ! }, ! { ! {"db_user_namespace", PGC_SIGHUP, CONN_AUTH_SECURITY, ! translatable("This allows per-database user names"), NULL ! }, ! &Db_user_namespace, false, NULL, NULL }, { /* * This var doesn't do anything; it's just here so that we won't * choke on SET AUTOCOMMIT TO ON from 7.3-vintage clients. ! */ ! {"autocommit", PGC_USERSET, CLIENT_CONN_STATEMENT, ! translatable("This var doesn't do anything"), ! translatable("It's just here so that we won't choke on SET AUTOCOMMIT " ! "TO ON from 7.3-vintage clients."), ! GUC_NO_SHOW_ALL ! }, ! &phony_autocommit, true, assign_phony_autocommit, NULL ! }, ! { ! {"default_transaction_read_only", PGC_USERSET, CLIENT_CONN_STATEMENT, ! translatable("Controls default read-only status of new transactions"), ! NULL ! }, ! &DefaultXactReadOnly, false, NULL, NULL ! }, ! { ! {"transaction_read_only", PGC_USERSET, UNGROUPED, ! translatable("No Description Available"), NULL, ! GUC_NO_RESET_ALL | NOT_IN_SAMPLE_CONF | DISALLOW_IN_CONF_FILE ! }, ! &XactReadOnly, false, NULL, NULL ! }, ! { ! {"add_missing_from", PGC_USERSET, COMPAT_OPTIONS_PREVIOUS, ! translatable("Add missing table references to from clauses"), ! NULL ! }, ! &add_missing_from, true, NULL, NULL }, /* End-of-list marker */ { ! {NULL, 0, 0, NULL, NULL}, NULL, false, NULL, NULL ! } }; ! struct config_int ConfigureNamesInt[] = { { ! {"default_statistics_target", PGC_USERSET, STATS_MONITORING, ! translatable("Sets the default statistics target"), ! translatable("This applies to table columns that have not had a " ! "column-specific target set via ALTER TABLE SET STATISTICS") ! }, ! &default_statistics_target, 10, 1, 1000, NULL, NULL ! }, ! { ! {"from_collapse_limit", PGC_USERSET, QUERY_TUNING_OTHER, ! translatable("From list size beyond which sub-queries are not " ! "collapsed"), ! translatable("The planner will merge sub-queries into upper " ! "queries if the resulting FROM list would have no more than " ! "this many items") ! }, ! &from_collapse_limit, 8, 1, INT_MAX, NULL, NULL ! }, ! { ! {"join_collapse_limit", PGC_USERSET, QUERY_TUNING_OTHER, ! translatable("From list size beyond which JOIN constructs not " ! "flattened"), ! translatable("The planner will flatten explicit inner JOIN " ! "constructs into lists of FROM items whenever a list of no more " ! "than this many items would result") ! }, ! &join_collapse_limit, 8, 1, INT_MAX, NULL, NULL ! }, ! { ! {"geqo_threshold", PGC_USERSET, QUERY_TUNING_GEQO, ! translatable("Threshold of FROM items beyond which geqo is used"), ! NULL ! }, ! &geqo_threshold, 11, 2, INT_MAX, NULL, NULL ! }, ! { ! {"geqo_pool_size", PGC_USERSET, QUERY_TUNING_GEQO, ! translatable("The number of individuals in one population"), ! NULL ! }, ! &Geqo_pool_size, DEFAULT_GEQO_POOL_SIZE, 0, MAX_GEQO_POOL_SIZE, NULL, NULL ! }, ! { ! {"geqo_effort", PGC_USERSET, QUERY_TUNING_GEQO, ! translatable("Effort is used to calculate a default for generations"), ! NULL ! }, ! &Geqo_effort, 1, 1, INT_MAX, NULL, NULL ! }, ! { ! {"geqo_generations", PGC_USERSET, QUERY_TUNING_GEQO, ! translatable("Specifies the number of iterations in the algorithm"), ! translatable("The number must be a positive integer. If 0 is " ! "specified then Effort * Log2(PoolSize) is used") ! }, ! &Geqo_generations, 0, 0, INT_MAX, NULL, NULL ! }, ! { ! {"geqo_random_seed", PGC_USERSET, QUERY_TUNING_GEQO, ! translatable("Can be set to get reproducible results from the algorithm"), ! translatable("If it is set to -1 then the algorithm behaves " ! "non-deterministically") ! }, ! &Geqo_random_seed, -1, INT_MIN, INT_MAX, NULL, NULL ! }, ! ! { ! {"deadlock_timeout", PGC_SIGHUP, LOCK_MANAGEMENT, ! translatable("Time to wait on lock (ms) before checking for deadlock"), ! NULL ! }, ! &DeadlockTimeout, 1000, 0, INT_MAX, NULL, NULL }, #ifdef HAVE_SYSLOG { ! {"syslog", PGC_SIGHUP, LOG_DEBUG_SYSLOG, ! translatable("Allows the use of syslog for logging"), ! translatable("If this option is set to 1, messages go both to syslog " ! "and the standard output. A setting of 2 sends output only to syslog. " ! "(Some messages will still go to the standard output/error.) The " ! "default is 0, which means syslog is off") ! }, ! &Use_syslog, 0, 0, 2, NULL, NULL }, #endif *************** static struct config_int *** 627,976 **** * backends number. */ { ! {"max_connections", PGC_POSTMASTER}, &MaxBackends, ! DEF_MAXBACKENDS, 1, INT_MAX, NULL, NULL }, { ! {"superuser_reserved_connections", PGC_POSTMASTER}, &ReservedBackends, ! 2, 0, INT_MAX, NULL, NULL }, { ! {"shared_buffers", PGC_POSTMASTER}, &NBuffers, ! DEF_NBUFFERS, 16, INT_MAX, NULL, NULL }, { ! {"port", PGC_POSTMASTER}, &PostPortNumber, ! DEF_PGPORT, 1, 65535, NULL, NULL }, { ! {"unix_socket_permissions", PGC_POSTMASTER}, &Unix_socket_permissions, ! 0777, 0000, 0777, NULL, NULL }, { ! {"sort_mem", PGC_USERSET}, &SortMem, ! 1024, 8 * BLCKSZ / 1024, INT_MAX, NULL, NULL }, { ! {"vacuum_mem", PGC_USERSET}, &VacuumMem, ! 8192, 1024, INT_MAX, NULL, NULL }, { ! {"max_files_per_process", PGC_BACKEND}, &max_files_per_process, ! 1000, 25, INT_MAX, NULL, NULL }, #ifdef LOCK_DEBUG { ! {"trace_lock_oidmin", PGC_SUSET}, &Trace_lock_oidmin, ! BootstrapObjectIdData, 1, INT_MAX, NULL, NULL }, { ! {"trace_lock_table", PGC_SUSET}, &Trace_lock_table, ! 0, 0, INT_MAX, NULL, NULL }, #endif { ! {"max_expr_depth", PGC_USERSET}, &max_expr_depth, ! DEFAULT_MAX_EXPR_DEPTH, 10, INT_MAX, NULL, NULL }, { ! {"statement_timeout", PGC_USERSET}, &StatementTimeout, ! 0, 0, INT_MAX, NULL, NULL }, { ! {"max_fsm_relations", PGC_POSTMASTER}, &MaxFSMRelations, ! 1000, 100, INT_MAX, NULL, NULL }, { ! {"max_fsm_pages", PGC_POSTMASTER}, &MaxFSMPages, ! 20000, 1000, INT_MAX, NULL, NULL }, { ! {"max_locks_per_transaction", PGC_POSTMASTER}, &max_locks_per_xact, ! 64, 10, INT_MAX, NULL, NULL }, { ! {"authentication_timeout", PGC_SIGHUP}, &AuthenticationTimeout, ! 60, 1, 600, NULL, NULL }, /* Not for general use */ { ! {"pre_auth_delay", PGC_SIGHUP}, &PreAuthDelay, ! 0, 0, 60, NULL, NULL }, { ! {"checkpoint_segments", PGC_SIGHUP}, &CheckPointSegments, ! 3, 1, INT_MAX, NULL, NULL }, { ! {"checkpoint_timeout", PGC_SIGHUP}, &CheckPointTimeout, ! 300, 30, 3600, NULL, NULL }, { ! {"checkpoint_warning", PGC_SIGHUP}, &CheckPointWarning, ! 30, 0, INT_MAX, NULL, NULL }, { ! {"wal_buffers", PGC_POSTMASTER}, &XLOGbuffers, ! 8, 4, INT_MAX, NULL, NULL }, { ! {"wal_debug", PGC_SUSET}, &XLOG_DEBUG, ! 0, 0, 16, NULL, NULL }, { ! {"commit_delay", PGC_USERSET}, &CommitDelay, ! 0, 0, 100000, NULL, NULL }, { ! {"commit_siblings", PGC_USERSET}, &CommitSiblings, ! 5, 1, 1000, NULL, NULL }, { ! {"extra_float_digits", PGC_USERSET}, &extra_float_digits, ! 0, -15, 2, NULL, NULL }, { ! {"log_min_duration_statement", PGC_SUSET}, &log_min_duration_statement, ! 0, 0, INT_MAX / 1000, NULL, NULL }, /* End-of-list marker */ { ! {NULL, 0}, NULL, 0, 0, 0, NULL, NULL } }; ! static struct config_real ConfigureNamesReal[] = { { ! {"effective_cache_size", PGC_USERSET}, &effective_cache_size, DEFAULT_EFFECTIVE_CACHE_SIZE, 0, DBL_MAX, NULL, NULL }, { ! {"random_page_cost", PGC_USERSET}, &random_page_cost, ! DEFAULT_RANDOM_PAGE_COST, 0, DBL_MAX, NULL, NULL ! }, ! { ! {"cpu_tuple_cost", PGC_USERSET}, &cpu_tuple_cost, ! DEFAULT_CPU_TUPLE_COST, 0, DBL_MAX, NULL, NULL ! }, ! { ! {"cpu_index_tuple_cost", PGC_USERSET}, &cpu_index_tuple_cost, DEFAULT_CPU_INDEX_TUPLE_COST, 0, DBL_MAX, NULL, NULL }, { ! {"cpu_operator_cost", PGC_USERSET}, &cpu_operator_cost, ! DEFAULT_CPU_OPERATOR_COST, 0, DBL_MAX, NULL, NULL }, { ! {"geqo_selection_bias", PGC_USERSET}, &Geqo_selection_bias, DEFAULT_GEQO_SELECTION_BIAS, MIN_GEQO_SELECTION_BIAS, MAX_GEQO_SELECTION_BIAS, NULL, NULL }, { ! {"seed", PGC_USERSET, GUC_NO_SHOW_ALL | GUC_NO_RESET_ALL}, &phony_random_seed, 0.5, 0.0, 1.0, assign_random_seed, show_random_seed }, /* End-of-list marker */ { ! {NULL, 0}, NULL, 0.0, 0.0, 0.0, NULL, NULL } }; ! static struct config_string ConfigureNamesString[] = { { ! {"client_encoding", PGC_USERSET, GUC_REPORT}, ! &client_encoding_string, ! "SQL_ASCII", assign_client_encoding, NULL }, { ! {"client_min_messages", PGC_USERSET}, &client_min_messages_str, ! "notice", assign_client_min_messages, NULL }, { ! {"log_min_error_statement", PGC_SUSET}, &log_min_error_statement_str, ! "panic", assign_min_error_statement, NULL }, { ! {"DateStyle", PGC_USERSET, GUC_LIST_INPUT | GUC_REPORT}, ! &datestyle_string, ! "ISO, US", assign_datestyle, show_datestyle }, { ! {"default_transaction_isolation", PGC_USERSET}, &default_iso_level_string, "read committed", assign_defaultxactisolevel, NULL }, { ! {"dynamic_library_path", PGC_SUSET}, &Dynamic_library_path, ! "$libdir", NULL, NULL }, { ! {"krb_server_keyfile", PGC_POSTMASTER}, &pg_krb_server_keyfile, ! PG_KRB_SRVTAB, NULL, NULL }, /* See main.c about why defaults for LC_foo are not all alike */ { ! {"lc_collate", PGC_INTERNAL}, &locale_collate, ! "C", NULL, NULL }, { ! {"lc_ctype", PGC_INTERNAL}, &locale_ctype, ! "C", NULL, NULL }, { ! {"lc_messages", PGC_SUSET}, &locale_messages, ! "", locale_messages_assign, NULL }, { ! {"lc_monetary", PGC_USERSET}, &locale_monetary, ! "C", locale_monetary_assign, NULL }, { ! {"lc_numeric", PGC_USERSET}, &locale_numeric, ! "C", locale_numeric_assign, NULL }, { ! {"lc_time", PGC_USERSET}, &locale_time, ! "C", locale_time_assign, NULL }, { ! {"preload_libraries", PGC_POSTMASTER, GUC_LIST_INPUT | GUC_LIST_QUOTE}, ! &preload_libraries_string, ! "", NULL, NULL }, { ! {"regex_flavor", PGC_USERSET}, ®ex_flavor_string, ! "advanced", assign_regex_flavor, NULL }, { ! {"search_path", PGC_USERSET, GUC_LIST_INPUT | GUC_LIST_QUOTE}, ! &namespace_search_path, ! "$user,public", assign_search_path, NULL }, /* Can't be set in postgresql.conf */ { ! {"server_encoding", PGC_INTERNAL, GUC_REPORT}, ! &server_encoding_string, ! "SQL_ASCII", NULL, NULL }, - /* Can't be set in postgresql.conf */ { ! {"server_version", PGC_INTERNAL, GUC_REPORT}, ! &server_version_string, ! PG_VERSION, NULL, NULL }, { ! {"log_min_messages", PGC_SUSET}, &log_min_messages_str, ! "notice", assign_log_min_messages, NULL }, /* Not for general use --- used by SET SESSION AUTHORIZATION */ { ! {"session_authorization", PGC_USERSET, GUC_NO_SHOW_ALL | GUC_NO_RESET_ALL}, &session_authorization_string, NULL, assign_session_authorization, show_session_authorization }, #ifdef HAVE_SYSLOG { ! {"syslog_facility", PGC_POSTMASTER}, &Syslog_facility, ! "LOCAL0", assign_facility, NULL }, { ! {"syslog_ident", PGC_POSTMASTER}, &Syslog_ident, ! "postgres", NULL, NULL }, #endif { ! {"TimeZone", PGC_USERSET}, &timezone_string, "UNKNOWN", assign_timezone, show_timezone }, { ! {"transaction_isolation", PGC_USERSET, GUC_NO_RESET_ALL}, ! &XactIsoLevel_string, ! NULL, assign_XactIsoLevel, show_XactIsoLevel }, { ! {"unix_socket_group", PGC_POSTMASTER}, &Unix_socket_group, ! "", NULL, NULL }, { ! {"unix_socket_directory", PGC_POSTMASTER}, &UnixSocketDir, ! "", NULL, NULL }, { ! {"virtual_host", PGC_POSTMASTER}, &VirtualHost, ! "", NULL, NULL }, { ! {"wal_sync_method", PGC_SIGHUP}, &XLOG_sync_method, XLOG_sync_method_default, assign_xlog_sync_method, NULL }, ! /* End-of-list marker */ { ! {NULL, 0}, NULL, NULL, NULL, NULL } }; /******** end of options list ********/ - /* * Actual lookup of variables is done through this single, sorted array. --- 786,1348 ---- * backends number. */ { ! {"max_connections", PGC_POSTMASTER, CONN_AUTH_SETTINGS, ! translatable("Maximum number of concurrent connections"), NULL ! }, ! &MaxBackends, DEF_MAXBACKENDS, 1, INT_MAX, NULL, NULL }, { ! {"superuser_reserved_connections", PGC_POSTMASTER, CONN_AUTH_SETTINGS, ! translatable("Number of 'connection slots' reserved for superusers"), ! NULL ! }, ! &ReservedBackends, 2, 0, INT_MAX, NULL, NULL }, { ! {"shared_buffers", PGC_POSTMASTER, RESOURCES_MEM, ! translatable("The number of shared memory buffers used by the server"), ! NULL ! }, ! &NBuffers, DEF_NBUFFERS, 16, INT_MAX, NULL, NULL }, { ! {"port", PGC_POSTMASTER, CONN_AUTH_SETTINGS, ! translatable("The TCP port the server listens on"), NULL ! }, ! &PostPortNumber, DEF_PGPORT, 1, 65535, NULL, NULL }, { ! {"unix_socket_permissions", PGC_POSTMASTER, CONN_AUTH_SETTINGS, ! translatable("Sets the access permissions of the Unix domain socket"), ! translatable("Unix domain sockets use the usual Unix file system " ! "permission set. The option value is expected to be an numeric mode " ! "specification in the form accepted by the chmod and umask system " ! "calls. (To use the customary octal format the number must start with " ! "a 0 (zero).)") ! }, ! &Unix_socket_permissions, 0777, 0000, 0777, NULL, NULL }, { ! {"sort_mem", PGC_USERSET, RESOURCES_MEM, ! translatable("Max memory to be used for sorts and hash tables"), ! translatable("Specifies the amount of memory to be used by internal " ! "sort operations and hash tables before switching to temporary disk " ! "files") ! }, ! &SortMem, 1024, 8 * BLCKSZ / 1024, INT_MAX, NULL, NULL }, { ! {"vacuum_mem", PGC_USERSET, RESOURCES_MEM, ! translatable("Max mem used to keep track of to-be-reclaimed tuples"), ! NULL ! }, ! &VacuumMem, 8192, 1024, INT_MAX, NULL, NULL }, { ! {"max_files_per_process", PGC_BACKEND, RESOURCES_DISK, ! translatable("Max num of simultaneously open files for each subprocess"), ! NULL ! }, ! &max_files_per_process, 1000, 25, INT_MAX, NULL, NULL }, #ifdef LOCK_DEBUG { ! {"trace_lock_oidmin", PGC_SUSET, DEVELOPER_OPTIONS, ! translatable("No Description Available"), NULL, ! NOT_IN_SAMPLE_CONF ! }, ! &Trace_lock_oidmin, BootstrapObjectIdData, 1, INT_MAX, NULL, NULL }, { ! {"trace_lock_table", PGC_SUSET, DEVELOPER_OPTIONS, ! translatable("No Description Available"), NULL, ! NOT_IN_SAMPLE_CONF ! }, ! &Trace_lock_table, 0, 0, INT_MAX, NULL, NULL }, #endif { ! {"max_expr_depth", PGC_USERSET, QUERY_TUNING_OTHER, ! translatable("Sets the maximum expression nesting depth of the parser"), ! NULL ! }, ! &max_expr_depth, DEFAULT_MAX_EXPR_DEPTH, 10, INT_MAX, NULL, NULL }, { ! {"statement_timeout", PGC_USERSET, CLIENT_CONN_STATEMENT, ! translatable("Max allowed duration (ms) of any statement"), ! translatable("A value of 0 turns off the timer") ! }, ! &StatementTimeout, 0, 0, INT_MAX, NULL, NULL }, { ! {"max_fsm_relations", PGC_POSTMASTER, RESOURCES_SPACE_MAP, ! translatable("Max. num. of tables, indexes for which free space is " ! "tracked"), NULL ! }, ! &MaxFSMRelations, 1000, 100, INT_MAX, NULL, NULL }, { ! {"max_fsm_pages", PGC_POSTMASTER, RESOURCES_SPACE_MAP, ! translatable("Maximum num. of disk pages for which free space is " ! "tracked"), NULL ! }, ! &MaxFSMPages, 20000, 1000, INT_MAX, NULL, NULL }, { ! {"max_locks_per_transaction", PGC_POSTMASTER, LOCK_MANAGEMENT, ! translatable("Maximum locks per transaction"), ! translatable("The shared lock table is sized on the assumption that " ! "at most max_locks_per_transaction * max_connections distinct " ! "objects will need to be locked at any one time.") ! }, ! &max_locks_per_xact, 64, 10, INT_MAX, NULL, NULL }, { ! {"authentication_timeout", PGC_SIGHUP, CONN_AUTH_SECURITY, ! translatable("Max time (s) to complete client authentication"), ! NULL ! }, ! &AuthenticationTimeout, 60, 1, 600, NULL, NULL }, /* Not for general use */ { ! {"pre_auth_delay", PGC_SIGHUP, UNGROUPED, ! translatable("No Description Available"), NULL, ! NOT_IN_SAMPLE_CONF | DISALLOW_IN_CONF_FILE ! }, ! &PreAuthDelay, 0, 0, 60, NULL, NULL }, { ! {"checkpoint_segments", PGC_SIGHUP, WAL_CHECKPOINTS, ! translatable("Max distance between automatic WAL checkpoints"), NULL ! }, ! &CheckPointSegments, 3, 1, INT_MAX, NULL, NULL }, { ! {"checkpoint_timeout", PGC_SIGHUP, WAL_CHECKPOINTS, ! translatable("Max time (s) between automatic WAL checkpoints"), NULL ! }, ! &CheckPointTimeout, 300, 30, 3600, NULL, NULL }, { ! {"checkpoint_warning", PGC_SIGHUP, WAL_CHECKPOINTS, ! translatable("Log if filling of checkpoint segments happens more" ! "frequently than this (s)"), ! translatable("Send a message to the server logs if checkpoints " ! "caused by the filling of checkpoint segment files happens more " ! "frequently than this number of seconds. Zero turns off the warning.") ! }, ! &CheckPointWarning, 30, 0, INT_MAX, NULL, NULL }, { ! {"wal_buffers", PGC_POSTMASTER, WAL_SETTINGS, ! translatable("Disk-page buffers in shared memory for WAL logging"), ! NULL ! }, ! &XLOGbuffers, 8, 4, INT_MAX, NULL, NULL }, { ! {"wal_debug", PGC_SUSET, DEVELOPER_OPTIONS, ! translatable("If nonzero, log WAL-related debugging output"), NULL, ! NOT_IN_SAMPLE_CONF ! }, ! &XLOG_DEBUG, 0, 0, 16, NULL, NULL }, { ! {"commit_delay", PGC_USERSET, WAL_CHECKPOINTS, ! translatable("Delay (us) betw. a commit to the WAL buffer and " ! "flushing the buffer to disk"), NULL ! }, ! &CommitDelay, 0, 0, 100000, NULL, NULL }, { ! {"commit_siblings", PGC_USERSET, WAL_CHECKPOINTS, ! translatable("Min concurrent open trans. before performing " ! "COMMIT_DELAY"), NULL ! }, ! &CommitSiblings, 5, 1, 1000, NULL, NULL }, { ! {"extra_float_digits", PGC_USERSET, CLIENT_CONN_LOCALE, ! translatable("Adjusts the num of digits displayed for " ! "floating-point values"), ! translatable("This includs float4, float8, and geometric data types. " ! "The parameter value is added to the standard number of digits " ! "(FLT_DIG or DBL_DIG as appropriate)"), ! NOT_IN_SAMPLE_CONF ! }, ! &extra_float_digits, 0, -15, 2, NULL, NULL }, { ! {"log_min_duration_statement", PGC_SUSET, LOG_DEBUG_WHEN, ! translatable("Min execution time (ms) above which statements will " ! "be logged"), ! translatable("The default is 0 (turning this feature off).") ! }, ! &log_min_duration_statement, 0, 0, INT_MAX / 1000, NULL, NULL }, /* End-of-list marker */ { ! {NULL, 0, 0, NULL, NULL}, NULL, 0, 0, 0, NULL, NULL } }; ! struct config_real ConfigureNamesReal[] = { { ! {"effective_cache_size", PGC_USERSET, QUERY_TUNING_COST, ! translatable("Planner's assumption about size of the disk cache"), ! translatable("That is, the portion of the kernel's disk cache that " ! "will be used for PostgreSQL data files. This is measured in disk " ! "pages, which are normally 8 kB each.") ! }, ! &effective_cache_size, DEFAULT_EFFECTIVE_CACHE_SIZE, 0, DBL_MAX, NULL, NULL }, { ! {"random_page_cost", PGC_USERSET, QUERY_TUNING_COST, ! translatable("Planner's estimate of the cost of a nonsequentially " ! "fetched disk page"), ! translatable("This is measured as a multiple of the cost of a " ! "sequential page fetch. A higher value makes it more likely a " ! "sequential scan will be used, a lower value makes it more likely an " ! "index scan will be used.") ! }, ! &random_page_cost, DEFAULT_RANDOM_PAGE_COST, 0, DBL_MAX, NULL, NULL ! }, ! { ! {"cpu_tuple_cost", PGC_USERSET, QUERY_TUNING_COST, ! translatable("Planner's estimate of the cost of processing each tuple"), ! translatable("This is measured as a fraction of the cost of a " ! "sequential page fetch.") ! }, ! &cpu_tuple_cost, DEFAULT_CPU_TUPLE_COST, 0, DBL_MAX, NULL, NULL ! }, ! { ! {"cpu_index_tuple_cost", PGC_USERSET, QUERY_TUNING_COST, ! translatable("Planner's estimate of processing cost for each " ! "index tuple during index scan"), ! translatable("This is measured as a fraction of the cost of a " ! "sequential page fetch.") ! }, ! &cpu_index_tuple_cost, DEFAULT_CPU_INDEX_TUPLE_COST, 0, DBL_MAX, NULL, NULL }, { ! {"cpu_operator_cost", PGC_USERSET, QUERY_TUNING_COST, ! translatable("Planner's estimate of processing cost of each op. in WHERE"), ! translatable("This is measured as a fraction of the cost of a sequential " ! "page fetch.") ! }, ! &cpu_operator_cost, DEFAULT_CPU_OPERATOR_COST, 0, DBL_MAX, NULL, NULL }, { ! {"geqo_selection_bias", PGC_USERSET, QUERY_TUNING_GEQO, ! translatable("The selective pressure within the population"), NULL ! }, ! &Geqo_selection_bias, DEFAULT_GEQO_SELECTION_BIAS, MIN_GEQO_SELECTION_BIAS, MAX_GEQO_SELECTION_BIAS, NULL, NULL }, { ! {"seed", PGC_USERSET, UNGROUPED, ! translatable("No Description Available"), NULL, ! GUC_NO_SHOW_ALL | GUC_NO_RESET_ALL | NOT_IN_SAMPLE_CONF | DISALLOW_IN_CONF_FILE ! }, &phony_random_seed, 0.5, 0.0, 1.0, assign_random_seed, show_random_seed }, /* End-of-list marker */ { ! {NULL, 0, 0, NULL, NULL}, NULL, 0.0, 0.0, 0.0, NULL, NULL } }; ! struct config_string ConfigureNamesString[] = { { ! {"client_encoding", PGC_USERSET, CLIENT_CONN_LOCALE, ! translatable("The client-side encoding (character set)"), NULL, ! GUC_REPORT ! }, ! &client_encoding_string, "SQL_ASCII", assign_client_encoding, NULL }, { ! {"client_min_messages", PGC_USERSET, LOG_DEBUG_WHEN, ! translatable("Controls which message levels are sent to the client"), ! translatable("Valid values are DEBUG5, DEBUG4, DEBUG3, DEBUG2, " ! "DEBUG1, LOG, NOTICE, WARNING, and ERROR. Each level includes all the " ! "levels that follow it. The later the level, the fewer messages are " ! "sent.") ! }, ! &client_min_messages_str, "notice", assign_client_min_messages, NULL }, { ! {"log_min_error_statement", PGC_SUSET, LOG_DEBUG_WHEN, ! translatable("Controls whether the erroneous statement is logged"), ! translatable("All SQL statements that cause an error of the " ! "specified level, or a higher level, are logged") ! }, ! &log_min_error_statement_str, "panic", assign_min_error_statement, NULL }, { ! {"DateStyle", PGC_USERSET, CLIENT_CONN_LOCALE, ! translatable("The display format for date and time values"), ! translatable("As well as the rules for interpreting ambiguous date " ! "input values"), ! GUC_LIST_INPUT | GUC_REPORT ! }, ! &datestyle_string, "ISO, US", assign_datestyle, show_datestyle }, { ! {"default_transaction_isolation", PGC_USERSET, CLIENT_CONN_STATEMENT, ! translatable("The default isolation level of each new transaction"), ! translatable("Each SQL transaction has an isolation level, which " ! "can be either 'read committed' or 'serializable'.") ! }, ! &default_iso_level_string, "read committed", assign_defaultxactisolevel, NULL }, { ! {"dynamic_library_path", PGC_SUSET, CLIENT_CONN_OTHER, ! translatable("Path for dynamically loadable modules"), ! translatable("If a dynamically loadable module needs to be opened and " ! "the specified name does not have a directory component (i.e. the " ! "name does not contain a slash), the system will search this path for " ! "the specified file.") ! }, ! &Dynamic_library_path, "$libdir", NULL, NULL }, { ! {"krb_server_keyfile", PGC_POSTMASTER, CONN_AUTH_SECURITY, ! translatable("The location of the Kerberos server key file"), NULL ! }, ! &pg_krb_server_keyfile, PG_KRB_SRVTAB, NULL, NULL }, /* See main.c about why defaults for LC_foo are not all alike */ { ! {"lc_collate", PGC_INTERNAL, UNGROUPED, ! translatable("Locale Collation order"), NULL, ! NOT_IN_SAMPLE_CONF ! }, ! &locale_collate, "C", NULL, NULL }, { ! {"lc_ctype", PGC_INTERNAL, UNGROUPED, ! translatable("Locale Character classification and case conversion"), ! NULL, ! NOT_IN_SAMPLE_CONF ! }, ! &locale_ctype, "C", NULL, NULL }, { ! {"lc_messages", PGC_SUSET, CLIENT_CONN_LOCALE, ! translatable("Language in which messages are displayed"), NULL ! }, ! &locale_messages, "", locale_messages_assign, NULL }, { ! {"lc_monetary", PGC_USERSET, CLIENT_CONN_LOCALE, ! translatable("The locale to use for formatting monetary amounts"), ! translatable("For example with the to_char family of functions") ! }, ! &locale_monetary, "C", locale_monetary_assign, NULL }, { ! {"lc_numeric", PGC_USERSET, CLIENT_CONN_LOCALE, ! translatable("Locale to use for formatting numbers"), ! translatable("For example with the to_char() family of functions") ! }, ! &locale_numeric, "C", locale_numeric_assign, NULL }, { ! {"lc_time", PGC_USERSET, CLIENT_CONN_LOCALE, ! translatable("Locale to use for formatting date and time values"), ! NULL ! }, ! &locale_time, "C", locale_time_assign, NULL }, { ! {"preload_libraries", PGC_POSTMASTER, RESOURCES_DISK, ! translatable("One or more shared libraries to preload start"), NULL, ! GUC_LIST_INPUT | GUC_LIST_QUOTE ! }, ! &preload_libraries_string, "", NULL, NULL }, { ! {"regex_flavor", PGC_USERSET, COMPAT_OPTIONS_PREVIOUS, ! translatable("The regular expression 'flavor'"), ! translatable("This can be set to advanced, extended, or basic") ! }, ! ®ex_flavor_string, "advanced", assign_regex_flavor, NULL }, { ! {"search_path", PGC_USERSET, CLIENT_CONN_STATEMENT, ! translatable("Schema search order when object not schema-qualified"), ! NULL, ! GUC_LIST_INPUT | GUC_LIST_QUOTE ! }, ! &namespace_search_path, "$user,public", assign_search_path, NULL }, /* Can't be set in postgresql.conf */ { ! {"server_encoding", PGC_INTERNAL, UNGROUPED, ! translatable("No Description Available"), NULL, ! GUC_REPORT | NOT_IN_SAMPLE_CONF | DISALLOW_IN_CONF_FILE ! }, ! &server_encoding_string, "SQL_ASCII", NULL, NULL }, { ! /* Can't be set in postgresql.conf */ ! {"server_version", PGC_INTERNAL, UNGROUPED, ! translatable("No Description Available"), NULL, ! GUC_REPORT | NOT_IN_SAMPLE_CONF | DISALLOW_IN_CONF_FILE ! }, ! &server_version_string, PG_VERSION, NULL, NULL }, { ! {"log_min_messages", PGC_SUSET, LOG_DEBUG_WHEN, ! translatable("Controls which message levels logged"), ! translatable("Valid values are DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, " ! "INFO, NOTICE, WARNING, ERROR, LOG, FATAL, and PANIC. Each level " ! "includes all the levels that follow it") ! }, ! &log_min_messages_str, "notice", assign_log_min_messages, NULL }, /* Not for general use --- used by SET SESSION AUTHORIZATION */ { ! {"session_authorization", PGC_USERSET, UNGROUPED, ! translatable("No Description Available"), NULL, ! GUC_NO_SHOW_ALL | GUC_NO_RESET_ALL ! }, &session_authorization_string, NULL, assign_session_authorization, show_session_authorization }, #ifdef HAVE_SYSLOG { ! {"syslog_facility", PGC_POSTMASTER, LOG_DEBUG_SYSLOG, ! translatable("Which syslog 'facility' to be used when syslog enabled"), ! translatable("You may choose from LOCAL0, LOCAL1, LOCAL2, LOCAL3, " ! "LOCAL4, LOCAL5, LOCAL6, LOCAL7") ! }, ! &Syslog_facility, "LOCAL0", assign_facility, NULL }, { ! {"syslog_ident", PGC_POSTMASTER, LOG_DEBUG_SYSLOG, ! translatable("Program name used to identify PostgreSQL messages " ! "in syslog"), NULL ! }, ! &Syslog_ident, "postgres", NULL, NULL }, #endif { ! {"TimeZone", PGC_USERSET, CLIENT_CONN_LOCALE, ! translatable("Time zone for displaying and interpreting time stamps"), ! NULL ! }, ! &timezone_string, "UNKNOWN", assign_timezone, show_timezone }, { ! {"transaction_isolation", PGC_USERSET, UNGROUPED, ! translatable("No Description Available"), NULL, ! GUC_NO_RESET_ALL | NOT_IN_SAMPLE_CONF | DISALLOW_IN_CONF_FILE ! }, ! &XactIsoLevel_string, NULL, assign_XactIsoLevel, show_XactIsoLevel }, { ! {"unix_socket_group", PGC_POSTMASTER, CONN_AUTH_SETTINGS, ! translatable("The group owner of the Unix domain socket"), ! translatable("(The owning user of the socket is always the user " ! "that starts the server.)") ! }, ! &Unix_socket_group, "", NULL, NULL }, { ! {"unix_socket_directory", PGC_POSTMASTER, CONN_AUTH_SETTINGS, ! translatable("The Unix-domain socket directory to listen to"), NULL ! }, ! &UnixSocketDir, "", NULL, NULL }, { ! {"virtual_host", PGC_POSTMASTER, CONN_AUTH_SECURITY, ! translatable("The host name or IP address to listen to"), NULL ! }, ! &VirtualHost, "", NULL, NULL }, { ! {"wal_sync_method", PGC_SIGHUP, WAL_SETTINGS, ! translatable("Method used for forcing WAL updates out to disk"), NULL ! }, ! &XLOG_sync_method, XLOG_sync_method_default, assign_xlog_sync_method, NULL }, ! /* End-of-list marker */ { ! {NULL, 0, 0, NULL, NULL}, NULL, NULL, NULL, NULL } }; /******** end of options list ********/ /* * Actual lookup of variables is done through this single, sorted array. Index: src/include/utils/guc.h =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/include/utils/guc.h,v retrieving revision 1.32 diff -c -p -r1.32 guc.h *** src/include/utils/guc.h 11 Jun 2003 18:01:14 -0000 1.32 --- src/include/utils/guc.h 30 Jun 2003 19:18:44 -0000 *************** *** 50,55 **** --- 50,60 ---- * * USERSET options can be set by anyone any time. */ + + /* + * When updating the GucContexts, please make sure to update the corresponding + * GucContext_names [] entries in pg_guc.c. The two must correspond + */ typedef enum { PGC_INTERNAL,