<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/runtime.sgml,v 1.189 2003/06/30 16:47:01 tgl Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/runtime.sgml,v 1.190 2003/07/04 16:41:21 tgl Exp $
-->
<Chapter Id="runtime">
</para>
</listitem>
</varlistentry>
+
+ <varlistentry>
+ <term><varname>VIRTUAL_HOST</varname> (<type>string</type>)</term>
+ <listitem>
+ <para>
+ Specifies the host name or IP address on which the server is
+ to listen for connections from client applications. The
+ default is to listen on all configured addresses (including
+ <systemitem class="systemname">localhost</>).
+ </para>
+ </listitem>
+ </varlistentry>
</variablelist>
</sect3>
</varlistentry>
<varlistentry>
- <term><varname>KRB_SERVER_KEYFILE</varname> (<type>string</type>)</term>
+ <term><varname>PASSWORD_ENCRYPTION</varname> (<type>boolean</type>)</term>
<listitem>
<para>
- Sets the location of the Kerberos server key file. See
- <xref linkend="kerberos-auth"> for details.
+ When a password is specified in <command>CREATE USER</> or
+ <command>ALTER USER</> without writing either <literal>ENCRYPTED</> or
+ <literal>UNENCRYPTED</>, this option determines whether the password is to be
+ encrypted. The default is on (encrypt the password).
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><varname>VIRTUAL_HOST</varname> (<type>string</type>)</term>
+ <term><varname>KRB_SERVER_KEYFILE</varname> (<type>string</type>)</term>
<listitem>
<para>
- Specifies the host name or IP address on which the server is
- to listen for connections from client applications. The
- default is to listening on all configured addresses (including
- <systemitem class="systemname">localhost</>).
+ Sets the location of the Kerberos server key file. See
+ <xref linkend="kerberos-auth"> for details.
</para>
</listitem>
</varlistentry>
</variablelist>
</sect3>
- <sect3 id="runtime-config-resource-disk">
- <title>Disk Resource Usage</title>
+ <sect3 id="runtime-config-resource-kernel">
+ <title>Kernel Resource Usage</title>
<variablelist>
<varlistentry>
<para>
By preloading a shared library (and initializing it if
applicable), the library startup time is avoided when the
- library is first used.
+ library is first used. However, the time to start each new
+ server process may increase, even if that process never
+ uses the library.
</para>
</listitem>
</varlistentry>
</sect2>
<sect2 id="runtime-config-wal">
- <title>Write Ahead Logging</title>
+ <title>Write Ahead Log</title>
<para>
See also <xref linkend="wal-configuration"> for details on WAL
<varname>fsync</varname>.
</para>
- <para>
- It should be noted that the performance penalty of having
- <varname>fsync</> on is considerably less in
- <productname>PostgreSQL</> version 7.1 and later. If you
- previously suppressed <function>fsync</> for performance
- reasons, you may wish to reconsider your choice.
- </para>
-
<para>
This option can only be set at server start or in the
<filename>postgresql.conf</filename> file.
<listitem>
<para>
Number of disk-page buffers in shared memory for WAL
- logging. The default is 4. This option can only be set at
+ logging. The default is 8. This option can only be set at
server start.
</para>
</listitem>
</para>
</listitem>
</varlistentry>
- </variablelist>
- <variablelist>
+ <varlistentry>
+ <term><varname>CPU_TUPLE_COST</varname> (<type>floating point</type>)</term>
+ <listitem>
+ <para>
+ Sets the query planner's estimate of the cost of processing
+ each tuple during a query. This is measured as a fraction of
+ the cost of a sequential page fetch.
+ </para>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
<term><varname>CPU_INDEX_TUPLE_COST</varname> (<type>floating point</type>)</term>
<listitem>
</listitem>
</varlistentry>
- <varlistentry>
- <term><varname>CPU_TUPLE_COST</varname> (<type>floating point</type>)</term>
- <listitem>
- <para>
- Sets the query planner's estimate of the cost of processing
- each tuple during a query. This is measured as a fraction of
- the cost of a sequential page fetch.
- </para>
- </listitem>
- </varlistentry>
-
</variablelist>
+
</sect3>
<sect3 id="runtime-config-query-geqo">
- <title>Genetic Estimate Query Optimizer</title>
+ <title>Genetic Query Optimizer</title>
<variablelist>
</variablelist>
</sect3>
<sect3 id="runtime-config-query-other">
- <title>Other Query Modifiers</title>
+ <title>Other Planner Options</title>
<variablelist>
<varlistentry>
- <term><varname>EXPLAIN_PRETTY_PRINT</varname> (<type>boolean</type>)</term>
+ <term><varname>DEFAULT_STATISTICS_TARGET</varname> (<type>integer</type>)</term>
<listitem>
<para>
- Determines whether <command>EXPLAIN VERBOSE</> uses the indented
- or non-indented format for displaying detailed query-tree dumps.
+ Sets the default statistics target for table columns that have not
+ had a column-specific target set via <command>ALTER TABLE SET
+ STATISTICS</>. Larger values increase the time needed to do
+ <command>ANALYZE</>, but may improve the quality of the planner's
+ estimates. The default value is 10.
</para>
</listitem>
</varlistentry>
-
+
<varlistentry>
<term><varname>FROM_COLLAPSE_LIMIT</varname> (<type>integer</type>)</term>
<listitem>
</para>
</listitem>
</varlistentry>
-
- <varlistentry>
- <term><varname>MAX_EXPR_DEPTH</varname> (<type>integer</type>)</term>
- <listitem>
- <para>
- Sets the maximum expression nesting depth of the parser. The
- default value is high enough for any normal query, but you can
- raise it if needed. (But if you raise it too high, you run
- the risk of server crashes due to stack overflow.)
- </para>
- </listitem>
- </varlistentry>
</variablelist>
</sect3>
</sect2>
<sect2 id="runtime-config-logging">
- <title>Logging and Debugging</title>
+ <title>Error Reporting and Logging</title>
<sect3 id="runtime-config-logging-syslog">
<title>Syslog</title>
<sect3 id="runtime-config-logging-when">
<title>When To Log</title>
- <para>
- Here is a list of the various message severity levels:
- <variablelist>
- <varlistentry>
- <term><literal>DEBUG[1-5]</literal></term>
- <listitem>
- <para>
- Provides information for use by developers.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><literal>INFO</literal></term>
- <listitem>
- <para>
- Provides information implicitly requested by the user,
- e.g., during <command>VACUUM VERBOSE</>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><literal>NOTICE</literal></term>
- <listitem>
- <para>
- Provides information that may be helpful to users, e.g.,
- truncation of long identifiers and the creation of indexes as part
- of primary keys.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><literal>WARNING</literal></term>
- <listitem>
- <para>
- Provides warnings to the user, e.g., <command>COMMIT</>
- outside a transaction block.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><literal>ERROR</literal></term>
- <listitem>
- <para>
- Reports an error that caused the current transaction to abort.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><literal>LOG</literal></term>
- <listitem>
- <para>
- Reports information of interest to administrators, e.g.,
- checkpoint activity.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><literal>FATAL</literal></term>
- <listitem>
- <para>
- Reports an error that caused the current session to abort.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><literal>PANIC</literal></term>
- <listitem>
- <para>
- Reports an error that caused all sessions to abort.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </para>
-
<variablelist>
<varlistentry>
</varlistentry>
</variablelist>
+
+ <para>
+ Here is a list of the various message severity levels used in
+ these settings:
+ <variablelist>
+ <varlistentry>
+ <term><literal>DEBUG[1-5]</literal></term>
+ <listitem>
+ <para>
+ Provides information for use by developers.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>INFO</literal></term>
+ <listitem>
+ <para>
+ Provides information implicitly requested by the user,
+ e.g., during <command>VACUUM VERBOSE</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>NOTICE</literal></term>
+ <listitem>
+ <para>
+ Provides information that may be helpful to users, e.g.,
+ truncation of long identifiers and the creation of indexes as part
+ of primary keys.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>WARNING</literal></term>
+ <listitem>
+ <para>
+ Provides warnings to the user, e.g., <command>COMMIT</>
+ outside a transaction block.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>ERROR</literal></term>
+ <listitem>
+ <para>
+ Reports an error that caused the current transaction to abort.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>LOG</literal></term>
+ <listitem>
+ <para>
+ Reports information of interest to administrators, e.g.,
+ checkpoint activity.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>FATAL</literal></term>
+ <listitem>
+ <para>
+ Reports an error that caused the current session to abort.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>PANIC</literal></term>
+ <listitem>
+ <para>
+ Reports an error that caused all sessions to abort.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+
</sect3>
<sect3 id="runtime-config-logging-what">
<title>What To Log</title>
</sect3>
</sect2>
+ <sect2 id="runtime-config-statistics">
+ <title>Runtime Statistics</title>
+
+ <sect3 id="runtime-config-statistics-monitor">
+ <title>Statistics Monitoring</title>
+ <variablelist>
+
+ <varlistentry>
+ <term><varname>LOG_STATEMENT_STATS</varname> (<type>boolean</type>)</term>
+ <term><varname>LOG_PARSER_STATS</varname> (<type>boolean</type>)</term>
+ <term><varname>LOG_PLANNER_STATS</varname> (<type>boolean</type>)</term>
+ <term><varname>LOG_EXECUTOR_STATS</varname> (<type>boolean</type>)</term>
+ <listitem>
+ <para>
+ For each query, write performance statistics of the respective
+ module to the server log. This is a crude profiling
+ instrument.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+
+ </sect3>
+ <sect3 id="runtime-config-statistics-collector">
+ <title>Query and Index Statistics Collector</title>
+ <variablelist>
+
+ <varlistentry>
+ <term><varname>STATS_START_COLLECTOR</varname> (<type>boolean</type>)</term>
+ <listitem>
+ <para>
+ Controls whether the server should start the
+ statistics-collection subprocess. This is on by default, but
+ may be turned off if you know you have no interest in
+ collecting statistics. This option can only be set at server
+ start.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>STATS_COMMAND_STRING</varname> (<type>boolean</type>)</term>
+ <listitem>
+ <para>
+ Enables the collection of statistics on the currently
+ executing command of each session, along with the time at
+ which that command began execution. This option is off by
+ default. Note that even when enabled, this information is not
+ visible to all users, only to superusers and the user owning
+ the session being reported on; so it should not represent a
+ security risk. This data can be accessed via the
+ <structname>pg_stat_activity</structname> system view; refer
+ to <xref linkend="monitoring"> for more information.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>STATS_BLOCK_LEVEL</varname> (<type>boolean</type>)</term>
+ <term><varname>STATS_ROW_LEVEL</varname> (<type>boolean</type>)</term>
+ <listitem>
+ <para>
+ These enable the collection of block-level and row-level statistics
+ on database activity, respectively. These options are off by
+ default. This data can be accessed via the
+ <structname>pg_stat</structname> and
+ <structname>pg_statio</structname> family of system views;
+ refer to <xref linkend="monitoring"> for more information.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>STATS_RESET_ON_SERVER_START</varname> (<type>boolean</type>)</term>
+ <listitem>
+ <para>
+ If on, collected statistics are zeroed out whenever the server
+ is restarted. If off, statistics are accumulated across server
+ restarts. The default is on. This option can only be set at
+ server start.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect3>
+ </sect2>
+
<sect2 id="runtime-config-client">
<title>Client Connection Defaults</title>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><varname>CLIENT_ENCODING</varname> (<type>string</type>)</term>
+ <indexterm><primary>character set encoding</></>
+ <listitem>
+ <para>
+ Sets the client-side encoding (character set).
+ The default is to use the database encoding.
+ </para>
+ </listitem>
+ </varlistentry>
<varlistentry>
<term><varname>LC_MESSAGES</varname> (<type>string</type>)</term>
</listitem>
</varlistentry>
- <varlistentry>
- <term><varname>CLIENT_ENCODING</varname> (<type>string</type>)</term>
- <indexterm><primary>character set encoding</></>
- <listitem>
- <para>
- Sets the client-side encoding (character set).
- The default is to use the database encoding.
- </para>
- </listitem>
- </varlistentry>
-
</variablelist>
+
</sect3>
<sect3 id="runtime-config-client-other">
<title>Other Defaults</title>
<variablelist>
<varlistentry>
- <term><varname>PASSWORD_ENCRYPTION</varname> (<type>boolean</type>)</term>
+ <term><varname>EXPLAIN_PRETTY_PRINT</varname> (<type>boolean</type>)</term>
<listitem>
<para>
- When a password is specified in <command>CREATE USER</> or
- <command>ALTER USER</> without writing either <literal>ENCRYPTED</> or
- <literal>UNENCRYPTED</>, this option determines whether the password is to be
- encrypted. The default is on (encrypt the password).
+ Determines whether <command>EXPLAIN VERBOSE</> uses the indented
+ or non-indented format for displaying detailed query-tree dumps.
</para>
</listitem>
</varlistentry>
-
<varlistentry>
<term><varname>DYNAMIC_LIBRARY_PATH</varname> (<type>string</type>)</term>
<indexterm><primary>dynamic_library_path</></>
</listitem>
</varlistentry>
-
- </variablelist>
- </sect3>
- </sect2>
-
- <sect2 id="runtime-config-statistics">
- <title>Statistics</title>
-
- <sect3 id="runtime-config-statistics-monitor">
- <title>Statistics Monitoring</title>
- <variablelist>
-
- <varlistentry>
- <term><varname>LOG_STATEMENT_STATS</varname> (<type>boolean</type>)</term>
- <term><varname>LOG_PARSER_STATS</varname> (<type>boolean</type>)</term>
- <term><varname>LOG_PLANNER_STATS</varname> (<type>boolean</type>)</term>
- <term><varname>LOG_EXECUTOR_STATS</varname> (<type>boolean</type>)</term>
- <listitem>
- <para>
- For each query, write performance statistics of the respective
- module to the server log. This is a crude profiling
- instrument.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><varname>DEFAULT_STATISTICS_TARGET</varname> (<type>integer</type>)</term>
- <listitem>
- <para>
- Sets the default statistics target for table columns that have not
- had a column-specific target set via <command>ALTER TABLE SET
- STATISTICS</>. Larger values increase the time needed to do
- <command>ANALYZE</>, but may improve the quality of the planner's
- estimates. The default value is 10.
- </para>
- </listitem>
- </varlistentry>
-
-
- </variablelist>
- </sect3>
- <sect3 id="runtime-config-statistics-collector">
- <title>Query and Index Statistics Collector</title>
- <variablelist>
-
- <varlistentry>
- <term><varname>STATS_START_COLLECTOR</varname> (<type>boolean</type>)</term>
- <listitem>
- <para>
- Controls whether the server should start the
- statistics-collection subprocess. This is on by default, but
- may be turned off if you know you have no interest in
- collecting statistics. This option can only be set at server
- start.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><varname>STATS_COMMAND_STRING</varname> (<type>boolean</type>)</term>
- <listitem>
- <para>
- Enables the collection of statistics on the currently
- executing command of each session, along with the time at
- which that command began execution. This option is off by
- default. Note that even when enabled, this information is not
- visible to all users, only to superusers and the user owning
- the session being reported on; so it should not represent a
- security risk. This data can be accessed via the
- <structname>pg_stat_activity</structname> system view; refer
- to <xref linkend="monitoring"> for more information.
- </para>
- </listitem>
- </varlistentry>
-
<varlistentry>
- <term><varname>STATS_BLOCK_LEVEL</varname> (<type>boolean</type>)</term>
- <term><varname>STATS_ROW_LEVEL</varname> (<type>boolean</type>)</term>
- <listitem>
- <para>
- These enable the collection of block-level and row-level statistics
- on database activity, respectively. These options are off by
- default. This data can be accessed via the
- <structname>pg_stat</structname> and
- <structname>pg_statio</structname> family of system views;
- refer to <xref linkend="monitoring"> for more information.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><varname>STATS_RESET_ON_SERVER_START</varname> (<type>boolean</type>)</term>
+ <term><varname>MAX_EXPR_DEPTH</varname> (<type>integer</type>)</term>
<listitem>
<para>
- If on, collected statistics are zeroed out whenever the server
- is restarted. If off, statistics are accumulated across server
- restarts. The default is on. This option can only be set at
- server start.
+ Sets the maximum expression nesting depth of the parser. The
+ default value is high enough for any normal query, but you can
+ raise it if needed. (But if you raise it too high, you run
+ the risk of server crashes due to stack overflow.)
</para>
</listitem>
</varlistentry>
<title>Platform and Client Compatibility</title>
<variablelist>
- <varlistentry>
- <term><varname>HAS_RENDEZVOUS</varname> (<type>boolean</type>)</term>
- <indexterm><primary>rendezvous</></>
- <listitem>
- <para>
- </para>
- </listitem>
- </varlistentry>
-
<varlistentry>
<term><varname>TRANSFORM_NULL_EQUALS</varname> (<type>boolean</type>)</term>
<indexterm><primary>IS NULL</></>
</sect2>
<sect2 id="runtime-config-developer">
- <title>Source Developer Options</title>
+ <title>Developer Options</title>
<para>
- The following options are for work on the PostgreSQL source and for severly
- crashed databases only. There should be no reason to use them in a production
- database setup. As such, they have been excluded from the postgresql.conf file.
- Additionally, many of these options require special source compilation flags
- to work.
+ The following options are intended for work on the PostgreSQL source,
+ and in some cases to assist with recovery of
+ severely damaged databases. There should be no reason to use them in
+ a production database setup. As such, they have been excluded from the
+ sample <filename>postgresql.conf</> file.
+ Note that many of these options require special
+ source compilation flags to work at all.
</para>
<variablelist>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><varname>PRE_AUTH_DELAY</varname> (<type>integer</type>)</term>
+ <listitem>
+ <para>
+ If nonzero, a delay of this many seconds occurs just after a new
+ server process is forked, before it conducts the authentication
+ process. This is intended to give an opportunity to attach to the
+ server process with a debugger to trace down misbehavior in
+ authentication.
+ </para>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
<term><varname>TRACE_NOTIFY</varname> (<type>boolean</type>)</term>
<listitem>
<command>LISTEN</command> and <command>NOTIFY</command>
commands.
<option>CLIENT_MIN_MESSAGES</option> or <option>LOG_MIN_MESSAGES</option>
- must be <literal>DEBUG1</literal> or lower to send output to the client
- or server logs.
+ must be <literal>DEBUG1</literal> or lower to send this output to the
+ client or server log, respectively.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>TRACE_LOCKS</varname> (<type>boolean</type>)</term>
+ <term><varname>TRACE_LWLOCKS</varname> (<type>boolean</type>)</term>
<term><varname>TRACE_USERLOCKS</varname> (<type>boolean</type>)</term>
<term><varname>TRACE_LOCK_OIDMIN</varname> (<type>boolean</type>)</term>
<term><varname>TRACE_LOCK_TABLE</varname> (<type>boolean</type>)</term>
<term><varname>DEBUG_DEADLOCKS</varname> (<type>boolean</type>)</term>
- <term><varname>SHOW_BTREE_BUILD_STATS</varname> (<type>boolean</type>)</term>
+ <term><varname>LOG_BTREE_BUILD_STATS</varname> (<type>boolean</type>)</term>
<listitem>
<para>
Various other code tracing and debugging options.
<term><varname>WAL_DEBUG</varname> (<type>integer</type>)</term>
<listitem>
<para>
- If nonzero, turn on WAL-related debugging output to the server log.
+ If nonzero, turn on WAL-related debugging output.
</para>
</listitem>
</varlistentry>
* Written by Peter Eisentraut <peter_e@gmx.net>.
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.133 2003/06/30 16:47:01 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.134 2003/07/04 16:41:21 tgl Exp $
*
*--------------------------------------------------------------------
*/
-
#include "postgres.h"
#include <errno.h>
#include <unistd.h>
#include "utils/guc.h"
+#include "utils/guc_tables.h"
#include "access/xlog.h"
#include "catalog/namespace.h"
#include "utils/pg_locale.h"
#include "pgstat.h"
-int log_min_duration_statement = 0;
-
#ifndef PG_KRB_SRVTAB
#define PG_KRB_SRVTAB ""
static const char *assign_defaultxactisolevel(const char *newval,
bool doit, bool interactive);
static const char *assign_log_min_messages(const char *newval,
- bool doit, bool interactive);
+ bool doit, bool interactive);
static const char *assign_client_min_messages(const char *newval,
bool doit, bool interactive);
static const char *assign_min_error_statement(const char *newval, bool doit,
static const char *assign_msglvl(int *var, const char *newval,
bool doit, bool interactive);
static const char *assign_log_error_verbosity(const char *newval, bool doit,
- bool interactive);
+ bool interactive);
static bool assign_phony_autocommit(bool newval, bool doit, bool interactive);
int log_min_messages = NOTICE;
int client_min_messages = NOTICE;
+int log_min_duration_statement = 0;
+
/*
* These variables are all dummies that don't do anything, except in some
static char *XactIsoLevel_string;
-/*
- * 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 ... */
#define SET_STRING_VARIABLE(rec, newval) \
} while (0)
+/*
+ * 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.
+ */
+const char *const config_group_names[] = {
+ gettext_noop("Ungrouped"),
+ gettext_noop("Connections & Authentication"),
+ gettext_noop("Connections & Authentication / Connection Settings"),
+ gettext_noop("Connections & Authentication / Security & Authentication"),
+ gettext_noop("Resource Usage"),
+ gettext_noop("Resource Usage / Memory"),
+ gettext_noop("Resource Usage / Free Space Map"),
+ gettext_noop("Resource Usage / Kernel Resources"),
+ gettext_noop("Write Ahead Log"),
+ gettext_noop("Write Ahead Log / Settings"),
+ gettext_noop("Write Ahead Log / Checkpoints"),
+ gettext_noop("Query Tuning"),
+ gettext_noop("Query Tuning / Planner Method Enabling"),
+ gettext_noop("Query Tuning / Planner Cost Constants"),
+ gettext_noop("Query Tuning / Genetic Query Optimizer"),
+ gettext_noop("Query Tuning / Other Planner Options"),
+ gettext_noop("Reporting & Logging"),
+ gettext_noop("Reporting & Logging / Syslog"),
+ gettext_noop("Reporting & Logging / When To Log"),
+ gettext_noop("Reporting & Logging / What To Log"),
+ gettext_noop("Statistics"),
+ gettext_noop("Statistics / Monitoring"),
+ gettext_noop("Statistics / Query & Index Statistics Collector"),
+ gettext_noop("Client Connection Defaults"),
+ gettext_noop("Client Connection Defaults / Statement Behavior"),
+ gettext_noop("Client Connection Defaults / Locale and Formatting"),
+ gettext_noop("Client Connection Defaults / Other Defaults"),
+ gettext_noop("Lock Management"),
+ gettext_noop("Version & Platform Compatibility"),
+ gettext_noop("Version & Platform Compatibility / Previous Postgres Versions"),
+ gettext_noop("Version & Platform Compatibility / Other Platforms & Clients"),
+ gettext_noop("Developer Options"),
+ NULL
+};
+
/*
+ * Contents of GUC tables
+ *
+ * See src/backend/utils/misc/README for design notes.
+ *
* TO ADD AN OPTION:
*
* 1. Declare a global variable of type bool, int, double, or char*
/******** option records follow ********/
-static struct config_bool
- ConfigureNamesBool[] =
+static struct config_bool ConfigureNamesBool[] =
{
{
- {"enable_seqscan", PGC_USERSET}, &enable_seqscan,
+ {"enable_seqscan", PGC_USERSET, QUERY_TUNING_METHOD,
+ gettext_noop("Enable planner's use of sequential-scan plans"),
+ NULL
+ },
+ &enable_seqscan,
true, NULL, NULL
},
{
- {"enable_indexscan", PGC_USERSET}, &enable_indexscan,
+ {"enable_indexscan", PGC_USERSET, QUERY_TUNING_METHOD,
+ gettext_noop("Enable planner's use of index-scan plans"),
+ NULL
+ },
+ &enable_indexscan,
true, NULL, NULL
},
{
- {"enable_tidscan", PGC_USERSET}, &enable_tidscan,
+ {"enable_tidscan", PGC_USERSET, QUERY_TUNING_METHOD,
+ gettext_noop("Enable planner's use of TID scan plans"),
+ NULL
+ },
+ &enable_tidscan,
true, NULL, NULL
},
{
- {"enable_sort", PGC_USERSET}, &enable_sort,
+ {"enable_sort", PGC_USERSET, QUERY_TUNING_METHOD,
+ gettext_noop("Enable planner's use of explicit sort steps"),
+ NULL
+ },
+ &enable_sort,
true, NULL, NULL
},
{
- {"enable_hashagg", PGC_USERSET}, &enable_hashagg,
+ {"enable_hashagg", PGC_USERSET, QUERY_TUNING_METHOD,
+ gettext_noop("Enable planner's use of hashed aggregation plans"),
+ NULL
+ },
+ &enable_hashagg,
true, NULL, NULL
},
{
- {"enable_nestloop", PGC_USERSET}, &enable_nestloop,
+ {"enable_nestloop", PGC_USERSET, QUERY_TUNING_METHOD,
+ gettext_noop("Enable planner's use of nested-loop join plans"),
+ NULL
+ },
+ &enable_nestloop,
true, NULL, NULL
},
{
- {"enable_mergejoin", PGC_USERSET}, &enable_mergejoin,
+ {"enable_mergejoin", PGC_USERSET, QUERY_TUNING_METHOD,
+ gettext_noop("Enable planner's use of merge join plans"),
+ NULL
+ },
+ &enable_mergejoin,
true, NULL, NULL
},
{
- {"enable_hashjoin", PGC_USERSET}, &enable_hashjoin,
+ {"enable_hashjoin", PGC_USERSET, QUERY_TUNING_METHOD,
+ gettext_noop("Enable planner's use of hash join plans"),
+ NULL
+ },
+ &enable_hashjoin,
true, NULL, NULL
},
{
- {"geqo", PGC_USERSET}, &enable_geqo,
+ {"geqo", PGC_USERSET, QUERY_TUNING_GEQO,
+ gettext_noop("Enable genetic query optimization"),
+ gettext_noop("This algorithm attempts to do planning without "
+ "exhaustive searching")
+ },
+ &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},
+ /* Not for general use --- used by SET SESSION AUTHORIZATION */
+ {"is_superuser", PGC_INTERNAL, UNGROUPED,
+ gettext_noop("Set to indicate current user's privilege status"),
+ NULL,
+ GUC_REPORT | GUC_NO_SHOW_ALL | GUC_NO_RESET_ALL | GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE
+ },
&session_auth_is_superuser,
false, NULL, NULL
},
-
{
- {"tcpip_socket", PGC_POSTMASTER}, &NetServer,
+ {"tcpip_socket", PGC_POSTMASTER, CONN_AUTH_SETTINGS,
+ gettext_noop("Accept TCP/IP connections"),
+ NULL
+ },
+ &NetServer,
false, NULL, NULL
},
{
- {"ssl", PGC_POSTMASTER}, &EnableSSL,
+ {"ssl", PGC_POSTMASTER, CONN_AUTH_SECURITY,
+ gettext_noop("Enables SSL connections"),
+ NULL
+ },
+ &EnableSSL,
false, NULL, NULL
},
{
- {"fsync", PGC_SIGHUP}, &enableFsync,
+ {"fsync", PGC_SIGHUP, WAL_SETTINGS,
+ gettext_noop("If on, server physically writes updates to disk"),
+ gettext_noop("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}, &zero_damaged_pages,
+ {"zero_damaged_pages", PGC_SUSET, DEVELOPER_OPTIONS,
+ gettext_noop("Continues processing past damaged page headers"),
+ gettext_noop("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"),
+ GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE
+ },
+ &zero_damaged_pages,
false, NULL, NULL
},
{
- {"silent_mode", PGC_POSTMASTER}, &SilentMode,
+ {"silent_mode", PGC_POSTMASTER, LOGGING_WHEN,
+ gettext_noop("Runs the server silently"),
+ gettext_noop("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_connections,
+ {"log_connections", PGC_BACKEND, LOGGING_WHAT,
+ gettext_noop("Logs each successful connection"),
+ NULL
+ },
+ &Log_connections,
false, NULL, NULL
},
{
- {"log_timestamp", PGC_SIGHUP}, &Log_timestamp,
+ {"log_timestamp", PGC_SIGHUP, LOGGING_WHAT,
+ gettext_noop("Prefixes server log messages with a time stamp"),
+ NULL
+ },
+ &Log_timestamp,
false, NULL, NULL
},
{
- {"log_pid", PGC_SIGHUP}, &Log_pid,
+ {"log_pid", PGC_SIGHUP, LOGGING_WHAT,
+ gettext_noop("Prefixes server log messages with the server PID"),
+ NULL
+ },
+ &Log_pid,
false, NULL, NULL
},
#ifdef USE_ASSERT_CHECKING
{
- {"debug_assertions", PGC_USERSET}, &assert_enabled,
+ {"debug_assertions", PGC_USERSET, DEVELOPER_OPTIONS,
+ gettext_noop("Turns on various assertion checks"),
+ gettext_noop("This is a debugging aid. To use this option, "
+ "PostgreSQL must be built with the configure option --enable-cassert"),
+ GUC_NOT_IN_SAMPLE
+ },
+ &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,
+ {"exit_on_error", PGC_USERSET, UNGROUPED,
+ gettext_noop("No Description Available"),
+ NULL,
+ GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
+ },
+ &ExitOnAnyError,
false, NULL, NULL
},
-
{
- {"log_statement", PGC_SUSET}, &log_statement,
+ {"log_statement", PGC_SUSET, LOGGING_WHAT,
+ gettext_noop("Causes each SQL statement to be logged"),
+ NULL
+ },
+ &log_statement,
false, NULL, NULL
},
{
- {"log_duration", PGC_SUSET}, &log_duration,
+ {"log_duration", PGC_SUSET, LOGGING_WHAT,
+ gettext_noop("Duration of every completed statement is logged"),
+ NULL
+ },
+ &log_duration,
false, NULL, NULL
},
{
- {"debug_print_parse", PGC_USERSET}, &Debug_print_parse,
+ {"debug_print_parse", PGC_USERSET, LOGGING_WHAT,
+ gettext_noop("Parse tree printed to server logs"),
+ gettext_noop("Parsed for each executed query")
+ },
+ &Debug_print_parse,
false, NULL, NULL
},
{
- {"debug_print_rewritten", PGC_USERSET}, &Debug_print_rewritten,
+ {"debug_print_rewritten", PGC_USERSET, LOGGING_WHAT,
+ gettext_noop("Prints query rewriter output to server log"),
+ NULL
+ },
+ &Debug_print_rewritten,
false, NULL, NULL
},
{
- {"debug_print_plan", PGC_USERSET}, &Debug_print_plan,
+ {"debug_print_plan", PGC_USERSET, LOGGING_WHAT,
+ gettext_noop("Prints execution plan to the server log"),
+ NULL
+ },
+ &Debug_print_plan,
false, NULL, NULL
},
{
- {"debug_pretty_print", PGC_USERSET}, &Debug_pretty_print,
+ {"debug_pretty_print", PGC_USERSET, LOGGING_WHAT,
+ gettext_noop("Indents displays from parse, rewritten and plan"),
+ NULL
+ },
+ &Debug_pretty_print,
false, NULL, NULL
},
-
{
- {"log_parser_stats", PGC_SUSET}, &log_parser_stats,
+ {"log_parser_stats", PGC_SUSET, STATS_MONITORING,
+ gettext_noop("Write parser performance stats to server log"),
+ NULL
+ },
+ &log_parser_stats,
false, NULL, NULL
},
{
- {"log_planner_stats", PGC_SUSET}, &log_planner_stats,
+ {"log_planner_stats", PGC_SUSET, STATS_MONITORING,
+ gettext_noop("Write planner performance stats to server log"),
+ NULL
+ },
+ &log_planner_stats,
false, NULL, NULL
},
{
- {"log_executor_stats", PGC_SUSET}, &log_executor_stats,
+ {"log_executor_stats", PGC_SUSET, STATS_MONITORING,
+ gettext_noop("Write executor performance stats to server log"),
+ NULL
+ },
+ &log_executor_stats,
false, NULL, NULL
},
{
- {"log_statement_stats", PGC_SUSET}, &log_statement_stats,
+ {"log_statement_stats", PGC_SUSET, STATS_MONITORING,
+ gettext_noop("Write statement performance stats to server log"),
+ NULL
+ },
+ &log_statement_stats,
false, NULL, NULL
},
#ifdef BTREE_BUILD_STATS
{
- {"log_btree_build_stats", PGC_SUSET}, &log_btree_build_stats,
+ {"log_btree_build_stats", PGC_SUSET, DEVELOPER_OPTIONS,
+ gettext_noop("No Description Available"),
+ NULL,
+ GUC_NOT_IN_SAMPLE
+ },
+ &log_btree_build_stats,
false, NULL, NULL
},
#endif
{
- {"explain_pretty_print", PGC_USERSET}, &Explain_pretty_print,
+ {"explain_pretty_print", PGC_USERSET, CLIENT_CONN_OTHER,
+ gettext_noop("Use indented output format for EXPLAIN VERBOSE"),
+ NULL
+ },
+ &Explain_pretty_print,
true, NULL, NULL
},
-
{
- {"stats_start_collector", PGC_POSTMASTER}, &pgstat_collect_startcollector,
+ {"stats_start_collector", PGC_POSTMASTER, STATS_COLLECTOR,
+ gettext_noop("Start server statistics-collection subprocess"),
+ NULL
+ },
+ &pgstat_collect_startcollector,
true, NULL, NULL
},
{
- {"stats_reset_on_server_start", PGC_POSTMASTER}, &pgstat_collect_resetonpmstart,
+ {"stats_reset_on_server_start", PGC_POSTMASTER, STATS_COLLECTOR,
+ gettext_noop("Collected statistics zeroed out on server restart"),
+ NULL
+ },
+ &pgstat_collect_resetonpmstart,
true, NULL, NULL
},
{
- {"stats_command_string", PGC_SUSET}, &pgstat_collect_querystring,
+ {"stats_command_string", PGC_SUSET, STATS_COLLECTOR,
+ gettext_noop("Enable stat collection of executing commands"),
+ gettext_noop("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}, &pgstat_collect_tuplelevel,
+ {"stats_row_level", PGC_SUSET, STATS_COLLECTOR,
+ gettext_noop("Enable collection of row-level stats on db activity"),
+ NULL
+ },
+ &pgstat_collect_tuplelevel,
false, NULL, NULL
},
{
- {"stats_block_level", PGC_SUSET}, &pgstat_collect_blocklevel,
+ {"stats_block_level", PGC_SUSET, STATS_COLLECTOR,
+ gettext_noop("Enables collection of block-level stats on db activity"),
+ NULL
+ },
+ &pgstat_collect_blocklevel,
false, NULL, NULL
},
{
- {"trace_notify", PGC_USERSET}, &Trace_notify,
+ {"trace_notify", PGC_USERSET, DEVELOPER_OPTIONS,
+ gettext_noop("Generates debugging output for LISTEN and NOTIFY"),
+ NULL,
+ GUC_NOT_IN_SAMPLE
+ },
+ &Trace_notify,
false, NULL, NULL
},
#ifdef LOCK_DEBUG
{
- {"trace_locks", PGC_SUSET}, &Trace_locks,
+ {"trace_locks", PGC_SUSET, DEVELOPER_OPTIONS,
+ gettext_noop("No Description Available"),
+ NULL,
+ GUC_NOT_IN_SAMPLE
+ },
+ &Trace_locks,
false, NULL, NULL
},
{
- {"trace_userlocks", PGC_SUSET}, &Trace_userlocks,
+ {"trace_userlocks", PGC_SUSET, DEVELOPER_OPTIONS,
+ gettext_noop("No Description Available"),
+ NULL,
+ GUC_NOT_IN_SAMPLE
+ },
+ &Trace_userlocks,
false, NULL, NULL
},
{
- {"trace_lwlocks", PGC_SUSET}, &Trace_lwlocks,
+ {"trace_lwlocks", PGC_SUSET, DEVELOPER_OPTIONS,
+ gettext_noop("No Description Available"),
+ NULL,
+ GUC_NOT_IN_SAMPLE
+ },
+ &Trace_lwlocks,
false, NULL, NULL
},
{
- {"debug_deadlocks", PGC_SUSET}, &Debug_deadlocks,
+ {"debug_deadlocks", PGC_SUSET, DEVELOPER_OPTIONS,
+ gettext_noop("No Description Available"),
+ NULL,
+ GUC_NOT_IN_SAMPLE
+ },
+ &Debug_deadlocks,
false, NULL, NULL
},
#endif
{
- {"log_hostname", PGC_SIGHUP}, &log_hostname,
+ {"log_hostname", PGC_SIGHUP, LOGGING_WHAT,
+ gettext_noop("Log hostname to connection logs"),
+ gettext_noop("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}, &LogSourcePort,
+ {"log_source_port", PGC_SIGHUP, LOGGING_WHAT,
+ gettext_noop("Log outgoing port number of the connecting host"),
+ NULL
+ },
+ &LogSourcePort,
false, NULL, NULL
},
{
- {"sql_inheritance", PGC_USERSET}, &SQL_inheritance,
+ {"sql_inheritance", PGC_USERSET, COMPAT_OPTIONS_PREVIOUS,
+ gettext_noop("This controls the inheritance semantics"),
+ gettext_noop("In particular, whether subtables are included by "
+ "various commands by default")
+ },
+ &SQL_inheritance,
true, NULL, NULL
},
{
- {"australian_timezones", PGC_USERSET}, &Australian_timezones,
+ {"australian_timezones", PGC_USERSET, CLIENT_CONN_LOCALE,
+ gettext_noop("If true, ACST, CST, EST, and SAT are interpreted "
+ "as Australian time zones"),
+ gettext_noop("Otherwise they are interpreted as North/South American "
+ "time zones and Saturday")
+ },
+ &Australian_timezones,
false, ClearDateCache, NULL
},
{
- {"password_encryption", PGC_USERSET}, &Password_encryption,
+ {"password_encryption", PGC_USERSET, CONN_AUTH_SECURITY,
+ gettext_noop("If unspecified the password is encrypted"),
+ gettext_noop("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}, &Transform_null_equals,
+ {"transform_null_equals", PGC_USERSET, COMPAT_OPTIONS_CLIENT,
+ gettext_noop("expr=NULL treated as expr IS NULL"),
+ gettext_noop("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}, &Db_user_namespace,
+ {"db_user_namespace", PGC_SIGHUP, CONN_AUTH_SECURITY,
+ gettext_noop("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, GUC_NO_SHOW_ALL}, &phony_autocommit,
+ /* only here for backwards compatibility */
+ {"autocommit", PGC_USERSET, CLIENT_CONN_STATEMENT,
+ gettext_noop("This var doesn't do anything"),
+ gettext_noop("It's just here so that we won't choke on SET AUTOCOMMIT "
+ "TO ON from 7.3-vintage clients."),
+ GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
+ },
+ &phony_autocommit,
true, assign_phony_autocommit, NULL
},
{
- {"default_transaction_read_only", PGC_USERSET}, &DefaultXactReadOnly,
+ {"default_transaction_read_only", PGC_USERSET, CLIENT_CONN_STATEMENT,
+ gettext_noop("Controls default read-only status of new transactions"),
+ NULL
+ },
+ &DefaultXactReadOnly,
false, NULL, NULL
},
{
- {"transaction_read_only", PGC_USERSET, GUC_NO_RESET_ALL}, &XactReadOnly,
+ {"transaction_read_only", PGC_USERSET, CLIENT_CONN_STATEMENT,
+ gettext_noop("Current transaction's read-only status"),
+ NULL,
+ GUC_NO_RESET_ALL | GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE
+ },
+ &XactReadOnly,
false, NULL, NULL
},
{
- {"add_missing_from", PGC_USERSET}, &add_missing_from,
+ {"add_missing_from", PGC_USERSET, COMPAT_OPTIONS_PREVIOUS,
+ gettext_noop("Add missing table references to from clauses"),
+ NULL
+ },
+ &add_missing_from,
true, NULL, NULL
},
/* End-of-list marker */
{
- {NULL, 0}, NULL, false, NULL, NULL
- },
+ {NULL, 0, 0, NULL, NULL}, NULL, false, NULL, NULL
+ }
};
-static struct config_int
- ConfigureNamesInt[] =
+static struct config_int ConfigureNamesInt[] =
{
{
- {"default_statistics_target", PGC_USERSET}, &default_statistics_target,
+ {"default_statistics_target", PGC_USERSET, QUERY_TUNING_OTHER,
+ gettext_noop("Sets the default statistics target"),
+ gettext_noop("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}, &from_collapse_limit,
+ {"from_collapse_limit", PGC_USERSET, QUERY_TUNING_OTHER,
+ gettext_noop("From list size beyond which sub-queries are not "
+ "collapsed"),
+ gettext_noop("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}, &join_collapse_limit,
+ {"join_collapse_limit", PGC_USERSET, QUERY_TUNING_OTHER,
+ gettext_noop("From list size beyond which JOIN constructs not "
+ "flattened"),
+ gettext_noop("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}, &geqo_threshold,
+ {"geqo_threshold", PGC_USERSET, QUERY_TUNING_GEQO,
+ gettext_noop("Threshold of FROM items beyond which geqo is used"),
+ NULL
+ },
+ &geqo_threshold,
11, 2, INT_MAX, NULL, NULL
},
{
- {"geqo_pool_size", PGC_USERSET}, &Geqo_pool_size,
+ {"geqo_pool_size", PGC_USERSET, QUERY_TUNING_GEQO,
+ gettext_noop("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}, &Geqo_effort,
+ {"geqo_effort", PGC_USERSET, QUERY_TUNING_GEQO,
+ gettext_noop("Effort is used to calculate a default for generations"),
+ NULL
+ },
+ &Geqo_effort,
1, 1, INT_MAX, NULL, NULL
},
{
- {"geqo_generations", PGC_USERSET}, &Geqo_generations,
+ {"geqo_generations", PGC_USERSET, QUERY_TUNING_GEQO,
+ gettext_noop("Specifies the number of iterations in the algorithm"),
+ gettext_noop("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}, &Geqo_random_seed,
+ {"geqo_random_seed", PGC_USERSET, QUERY_TUNING_GEQO,
+ gettext_noop("Can be set to get reproducible results from the algorithm"),
+ gettext_noop("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}, &DeadlockTimeout,
+ {"deadlock_timeout", PGC_SIGHUP, LOCK_MANAGEMENT,
+ gettext_noop("Time to wait on lock (msec) before checking for deadlock"),
+ NULL
+ },
+ &DeadlockTimeout,
1000, 0, INT_MAX, NULL, NULL
},
#ifdef HAVE_SYSLOG
{
- {"syslog", PGC_SIGHUP}, &Use_syslog,
+ {"syslog", PGC_SIGHUP, LOGGING_SYSLOG,
+ gettext_noop("Allows the use of syslog for logging"),
+ gettext_noop("If this option is 1, messages go both to syslog "
+ "and the standard output. A value 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
* backends number.
*/
{
- {"max_connections", PGC_POSTMASTER}, &MaxBackends,
+ {"max_connections", PGC_POSTMASTER, CONN_AUTH_SETTINGS,
+ gettext_noop("Max number of concurrent connections"),
+ NULL
+ },
+ &MaxBackends,
DEF_MAXBACKENDS, 1, INT_MAX, NULL, NULL
},
{
- {"superuser_reserved_connections", PGC_POSTMASTER}, &ReservedBackends,
+ {"superuser_reserved_connections", PGC_POSTMASTER, CONN_AUTH_SETTINGS,
+ gettext_noop("Number of 'connection slots' reserved for superusers"),
+ NULL
+ },
+ &ReservedBackends,
2, 0, INT_MAX, NULL, NULL
},
{
- {"shared_buffers", PGC_POSTMASTER}, &NBuffers,
+ {"shared_buffers", PGC_POSTMASTER, RESOURCES_MEM,
+ gettext_noop("The number of shared memory buffers used by the server"),
+ NULL
+ },
+ &NBuffers,
DEF_NBUFFERS, 16, INT_MAX, NULL, NULL
},
{
- {"port", PGC_POSTMASTER}, &PostPortNumber,
+ {"port", PGC_POSTMASTER, CONN_AUTH_SETTINGS,
+ gettext_noop("The TCP port the server listens on"),
+ NULL
+ },
+ &PostPortNumber,
DEF_PGPORT, 1, 65535, NULL, NULL
},
{
- {"unix_socket_permissions", PGC_POSTMASTER}, &Unix_socket_permissions,
+ {"unix_socket_permissions", PGC_POSTMASTER, CONN_AUTH_SETTINGS,
+ gettext_noop("Sets the access permissions of the Unix domain socket"),
+ gettext_noop("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}, &SortMem,
+ {"sort_mem", PGC_USERSET, RESOURCES_MEM,
+ gettext_noop("Max memory to be used for sorts and hash tables"),
+ gettext_noop("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}, &VacuumMem,
+ {"vacuum_mem", PGC_USERSET, RESOURCES_MEM,
+ gettext_noop("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}, &max_files_per_process,
+ {"max_files_per_process", PGC_BACKEND, RESOURCES_KERNEL,
+ gettext_noop("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}, &Trace_lock_oidmin,
+ {"trace_lock_oidmin", PGC_SUSET, DEVELOPER_OPTIONS,
+ gettext_noop("No Description Available"),
+ NULL,
+ GUC_NOT_IN_SAMPLE
+ },
+ &Trace_lock_oidmin,
BootstrapObjectIdData, 1, INT_MAX, NULL, NULL
},
{
- {"trace_lock_table", PGC_SUSET}, &Trace_lock_table,
+ {"trace_lock_table", PGC_SUSET, DEVELOPER_OPTIONS,
+ gettext_noop("No Description Available"),
+ NULL,
+ GUC_NOT_IN_SAMPLE
+ },
+ &Trace_lock_table,
0, 0, INT_MAX, NULL, NULL
},
#endif
{
- {"max_expr_depth", PGC_USERSET}, &max_expr_depth,
+ {"max_expr_depth", PGC_USERSET, CLIENT_CONN_OTHER,
+ gettext_noop("Max expression nesting depth"),
+ NULL
+ },
+ &max_expr_depth,
DEFAULT_MAX_EXPR_DEPTH, 10, INT_MAX, NULL, NULL
},
{
- {"statement_timeout", PGC_USERSET}, &StatementTimeout,
+ {"statement_timeout", PGC_USERSET, CLIENT_CONN_STATEMENT,
+ gettext_noop("Max allowed duration (msec) of any statement"),
+ gettext_noop("A value of 0 turns off the timeout")
+ },
+ &StatementTimeout,
0, 0, INT_MAX, NULL, NULL
},
{
- {"max_fsm_relations", PGC_POSTMASTER}, &MaxFSMRelations,
+ {"max_fsm_relations", PGC_POSTMASTER, RESOURCES_FSM,
+ gettext_noop("Max num. of tables+indexes for which free space is "
+ "tracked"),
+ NULL
+ },
+ &MaxFSMRelations,
1000, 100, INT_MAX, NULL, NULL
},
{
- {"max_fsm_pages", PGC_POSTMASTER}, &MaxFSMPages,
+ {"max_fsm_pages", PGC_POSTMASTER, RESOURCES_FSM,
+ gettext_noop("Max num. of disk pages for which free space is "
+ "tracked"),
+ NULL
+ },
+ &MaxFSMPages,
20000, 1000, INT_MAX, NULL, NULL
},
{
- {"max_locks_per_transaction", PGC_POSTMASTER}, &max_locks_per_xact,
+ {"max_locks_per_transaction", PGC_POSTMASTER, LOCK_MANAGEMENT,
+ gettext_noop("Max locks per transaction"),
+ gettext_noop("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}, &AuthenticationTimeout,
+ {"authentication_timeout", PGC_SIGHUP, CONN_AUTH_SECURITY,
+ gettext_noop("Max time (sec) to complete client authentication"),
+ NULL
+ },
+ &AuthenticationTimeout,
60, 1, 600, NULL, NULL
},
- /* Not for general use */
{
- {"pre_auth_delay", PGC_SIGHUP}, &PreAuthDelay,
+ /* Not for general use */
+ {"pre_auth_delay", PGC_SIGHUP, DEVELOPER_OPTIONS,
+ gettext_noop("No Description Available"),
+ NULL,
+ GUC_NOT_IN_SAMPLE
+ },
+ &PreAuthDelay,
0, 0, 60, NULL, NULL
},
{
- {"checkpoint_segments", PGC_SIGHUP}, &CheckPointSegments,
+ {"checkpoint_segments", PGC_SIGHUP, WAL_CHECKPOINTS,
+ gettext_noop("Max distance between automatic WAL checkpoints"),
+ NULL
+ },
+ &CheckPointSegments,
3, 1, INT_MAX, NULL, NULL
},
{
- {"checkpoint_timeout", PGC_SIGHUP}, &CheckPointTimeout,
+ {"checkpoint_timeout", PGC_SIGHUP, WAL_CHECKPOINTS,
+ gettext_noop("Max time (sec) between automatic WAL checkpoints"),
+ NULL
+ },
+ &CheckPointTimeout,
300, 30, 3600, NULL, NULL
},
{
- {"checkpoint_warning", PGC_SIGHUP}, &CheckPointWarning,
+ {"checkpoint_warning", PGC_SIGHUP, WAL_CHECKPOINTS,
+ gettext_noop("Log if filling of checkpoint segments happens more"
+ "frequently than this (sec)"),
+ gettext_noop("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}, &XLOGbuffers,
+ {"wal_buffers", PGC_POSTMASTER, WAL_SETTINGS,
+ gettext_noop("Disk-page buffers in shared memory for WAL logging"),
+ NULL
+ },
+ &XLOGbuffers,
8, 4, INT_MAX, NULL, NULL
},
{
- {"wal_debug", PGC_SUSET}, &XLOG_DEBUG,
+ {"wal_debug", PGC_SUSET, DEVELOPER_OPTIONS,
+ gettext_noop("If nonzero, log WAL-related debugging output"),
+ NULL,
+ GUC_NOT_IN_SAMPLE
+ },
+ &XLOG_DEBUG,
0, 0, 16, NULL, NULL
},
{
- {"commit_delay", PGC_USERSET}, &CommitDelay,
+ {"commit_delay", PGC_USERSET, WAL_CHECKPOINTS,
+ gettext_noop("Delay (usec) between transaction commit and "
+ "flushing WAL to disk"),
+ NULL
+ },
+ &CommitDelay,
0, 0, 100000, NULL, NULL
},
{
- {"commit_siblings", PGC_USERSET}, &CommitSiblings,
+ {"commit_siblings", PGC_USERSET, WAL_CHECKPOINTS,
+ gettext_noop("Min concurrent open trans. before performing "
+ "COMMIT_DELAY"),
+ NULL
+ },
+ &CommitSiblings,
5, 1, 1000, NULL, NULL
},
{
- {"extra_float_digits", PGC_USERSET}, &extra_float_digits,
+ {"extra_float_digits", PGC_USERSET, CLIENT_CONN_LOCALE,
+ gettext_noop("Adjusts number of digits displayed for "
+ "floating-point values"),
+ gettext_noop("This affects float4, float8, and geometric data types. "
+ "The parameter value is added to the standard number of digits "
+ "(FLT_DIG or DBL_DIG as appropriate)")
+ },
+ &extra_float_digits,
0, -15, 2, NULL, NULL
},
{
- {"log_min_duration_statement", PGC_SUSET}, &log_min_duration_statement,
+ {"log_min_duration_statement", PGC_SUSET, LOGGING_WHEN,
+ gettext_noop("Min execution time (msec) above which statements will "
+ "be logged"),
+ gettext_noop("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}, NULL, 0, 0, 0, NULL, NULL
+ {NULL, 0, 0, NULL, NULL}, NULL, 0, 0, 0, NULL, NULL
}
};
-static struct config_real
- ConfigureNamesReal[] =
+static struct config_real ConfigureNamesReal[] =
{
{
- {"effective_cache_size", PGC_USERSET}, &effective_cache_size,
+ {"effective_cache_size", PGC_USERSET, QUERY_TUNING_COST,
+ gettext_noop("Planner's assumption about size of the disk cache"),
+ gettext_noop("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}, &random_page_cost,
+ {"random_page_cost", PGC_USERSET, QUERY_TUNING_COST,
+ gettext_noop("Planner's estimate of the cost of a nonsequentially "
+ "fetched disk page"),
+ gettext_noop("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}, &cpu_tuple_cost,
+ {"cpu_tuple_cost", PGC_USERSET, QUERY_TUNING_COST,
+ gettext_noop("Planner's estimate of the cost of processing each tuple"),
+ gettext_noop("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}, &cpu_index_tuple_cost,
+ {"cpu_index_tuple_cost", PGC_USERSET, QUERY_TUNING_COST,
+ gettext_noop("Planner's estimate of processing cost for each "
+ "index tuple during index scan"),
+ gettext_noop("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}, &cpu_operator_cost,
+ {"cpu_operator_cost", PGC_USERSET, QUERY_TUNING_COST,
+ gettext_noop("Planner's estimate of processing cost of each op. in WHERE"),
+ gettext_noop("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}, &Geqo_selection_bias,
+ {"geqo_selection_bias", PGC_USERSET, QUERY_TUNING_GEQO,
+ gettext_noop("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, GUC_NO_SHOW_ALL | GUC_NO_RESET_ALL},
+ {"seed", PGC_USERSET, UNGROUPED,
+ gettext_noop("Seed for random-number generation"),
+ NULL,
+ GUC_NO_SHOW_ALL | GUC_NO_RESET_ALL | GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE
+ },
&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
+ {NULL, 0, 0, NULL, NULL}, NULL, 0.0, 0.0, 0.0, NULL, NULL
}
};
-static struct config_string
- ConfigureNamesString[] =
+static struct config_string ConfigureNamesString[] =
{
{
- {"client_encoding", PGC_USERSET, GUC_REPORT},
+ {"client_encoding", PGC_USERSET, CLIENT_CONN_LOCALE,
+ gettext_noop("Client's character set encoding"),
+ NULL,
+ GUC_REPORT
+ },
&client_encoding_string,
"SQL_ASCII", assign_client_encoding, NULL
},
{
- {"client_min_messages", PGC_USERSET}, &client_min_messages_str,
+ {"client_min_messages", PGC_USERSET, LOGGING_WHEN,
+ gettext_noop("Controls which message levels are sent to the client"),
+ gettext_noop("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_messages", PGC_SUSET}, &log_min_messages_str,
+ {"log_min_messages", PGC_SUSET, LOGGING_WHEN,
+ gettext_noop("Controls which message levels logged"),
+ gettext_noop("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
},
{
- {"log_error_verbosity", PGC_SUSET}, &log_error_verbosity_str,
+ {"log_error_verbosity", PGC_SUSET, LOGGING_WHEN,
+ gettext_noop("Controls verbosity of logged messages"),
+ gettext_noop("Valid values are TERSE, DEFAULT, and VERBOSE")
+ },
+ &log_error_verbosity_str,
"default", assign_log_error_verbosity, NULL
},
{
- {"log_min_error_statement", PGC_SUSET}, &log_min_error_statement_str,
+ {"log_min_error_statement", PGC_SUSET, LOGGING_WHEN,
+ gettext_noop("Controls whether the erroneous statement is logged"),
+ gettext_noop("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, GUC_LIST_INPUT | GUC_REPORT},
+ {"DateStyle", PGC_USERSET, CLIENT_CONN_LOCALE,
+ gettext_noop("The display format for date and time values"),
+ gettext_noop("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}, &default_iso_level_string,
+ {"default_transaction_isolation", PGC_USERSET, CLIENT_CONN_STATEMENT,
+ gettext_noop("The default isolation level of each new transaction"),
+ gettext_noop("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}, &Dynamic_library_path,
+ {"dynamic_library_path", PGC_SUSET, CLIENT_CONN_OTHER,
+ gettext_noop("Path for dynamically loadable modules"),
+ gettext_noop("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}, &pg_krb_server_keyfile,
+ {"krb_server_keyfile", PGC_POSTMASTER, CONN_AUTH_SECURITY,
+ gettext_noop("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}, &locale_collate,
+ {"lc_collate", PGC_INTERNAL, CLIENT_CONN_LOCALE,
+ gettext_noop("Locale collation order"),
+ NULL,
+ GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE
+ },
+ &locale_collate,
"C", NULL, NULL
},
{
- {"lc_ctype", PGC_INTERNAL}, &locale_ctype,
+ {"lc_ctype", PGC_INTERNAL, CLIENT_CONN_LOCALE,
+ gettext_noop("Locale character classification and case conversion"),
+ NULL,
+ GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE
+ },
+ &locale_ctype,
"C", NULL, NULL
},
{
- {"lc_messages", PGC_SUSET}, &locale_messages,
+ {"lc_messages", PGC_SUSET, CLIENT_CONN_LOCALE,
+ gettext_noop("Language in which messages are displayed"),
+ NULL
+ },
+ &locale_messages,
"", locale_messages_assign, NULL
},
{
- {"lc_monetary", PGC_USERSET}, &locale_monetary,
+ {"lc_monetary", PGC_USERSET, CLIENT_CONN_LOCALE,
+ gettext_noop("Locale for formatting monetary amounts"),
+ NULL
+ },
+ &locale_monetary,
"C", locale_monetary_assign, NULL
},
{
- {"lc_numeric", PGC_USERSET}, &locale_numeric,
+ {"lc_numeric", PGC_USERSET, CLIENT_CONN_LOCALE,
+ gettext_noop("Locale for formatting numbers"),
+ NULL
+ },
+ &locale_numeric,
"C", locale_numeric_assign, NULL
},
{
- {"lc_time", PGC_USERSET}, &locale_time,
+ {"lc_time", PGC_USERSET, CLIENT_CONN_LOCALE,
+ gettext_noop("Locale for formatting date and time values"),
+ NULL
+ },
+ &locale_time,
"C", locale_time_assign, NULL
},
{
- {"preload_libraries", PGC_POSTMASTER, GUC_LIST_INPUT | GUC_LIST_QUOTE},
+ {"preload_libraries", PGC_POSTMASTER, RESOURCES_KERNEL,
+ gettext_noop("Shared libraries to preload into postmaster"),
+ NULL,
+ GUC_LIST_INPUT | GUC_LIST_QUOTE
+ },
&preload_libraries_string,
"", NULL, NULL
},
{
- {"regex_flavor", PGC_USERSET}, ®ex_flavor_string,
+ {"regex_flavor", PGC_USERSET, COMPAT_OPTIONS_PREVIOUS,
+ gettext_noop("Regular expression 'flavor'"),
+ gettext_noop("This can be set to advanced, extended, or basic")
+ },
+ ®ex_flavor_string,
"advanced", assign_regex_flavor, NULL
},
{
- {"search_path", PGC_USERSET, GUC_LIST_INPUT | GUC_LIST_QUOTE},
+ {"search_path", PGC_USERSET, CLIENT_CONN_STATEMENT,
+ gettext_noop("Schema search order for names 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, GUC_REPORT},
+ /* Can't be set in postgresql.conf */
+ {"server_encoding", PGC_INTERNAL, CLIENT_CONN_LOCALE,
+ gettext_noop("Server (database) character set encoding"),
+ NULL,
+ GUC_REPORT | GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE
+ },
&server_encoding_string,
"SQL_ASCII", NULL, NULL
},
- /* Can't be set in postgresql.conf */
{
- {"server_version", PGC_INTERNAL, GUC_REPORT},
+ /* Can't be set in postgresql.conf */
+ {"server_version", PGC_INTERNAL, UNGROUPED,
+ gettext_noop("Server version"),
+ NULL,
+ GUC_REPORT | GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE
+ },
&server_version_string,
PG_VERSION, NULL, NULL
},
- /* Not for general use --- used by SET SESSION AUTHORIZATION */
{
- {"session_authorization", PGC_USERSET, GUC_NO_SHOW_ALL | GUC_NO_RESET_ALL},
+ /* Not for general use --- used by SET SESSION AUTHORIZATION */
+ {"session_authorization", PGC_USERSET, UNGROUPED,
+ gettext_noop("Current session userid"),
+ NULL,
+ GUC_NO_SHOW_ALL | GUC_NO_RESET_ALL | GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE
+ },
&session_authorization_string,
NULL, assign_session_authorization, show_session_authorization
},
#ifdef HAVE_SYSLOG
{
- {"syslog_facility", PGC_POSTMASTER}, &Syslog_facility,
+ {"syslog_facility", PGC_POSTMASTER, LOGGING_SYSLOG,
+ gettext_noop("Which syslog 'facility' to be used when syslog enabled"),
+ gettext_noop("You may choose from LOCAL0, LOCAL1, LOCAL2, LOCAL3, "
+ "LOCAL4, LOCAL5, LOCAL6, LOCAL7")
+ },
+ &Syslog_facility,
"LOCAL0", assign_facility, NULL
},
{
- {"syslog_ident", PGC_POSTMASTER}, &Syslog_ident,
+ {"syslog_ident", PGC_POSTMASTER, LOGGING_SYSLOG,
+ gettext_noop("Program name used to identify PostgreSQL messages "
+ "in syslog"),
+ NULL
+ },
+ &Syslog_ident,
"postgres", NULL, NULL
},
#endif
{
- {"TimeZone", PGC_USERSET}, &timezone_string,
+ {"TimeZone", PGC_USERSET, CLIENT_CONN_LOCALE,
+ gettext_noop("Time zone for displaying and interpreting time stamps"),
+ NULL
+ },
+ &timezone_string,
"UNKNOWN", assign_timezone, show_timezone
},
{
- {"transaction_isolation", PGC_USERSET, GUC_NO_RESET_ALL},
+ {"transaction_isolation", PGC_USERSET, CLIENT_CONN_STATEMENT,
+ gettext_noop("Current transaction's isolation level"),
+ NULL,
+ GUC_NO_RESET_ALL | GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE
+ },
&XactIsoLevel_string,
NULL, assign_XactIsoLevel, show_XactIsoLevel
},
{
- {"unix_socket_group", PGC_POSTMASTER}, &Unix_socket_group,
+ {"unix_socket_group", PGC_POSTMASTER, CONN_AUTH_SETTINGS,
+ gettext_noop("The group owner of the Unix domain socket"),
+ gettext_noop("(The owning user of the socket is always the user "
+ "that starts the server.)")
+ },
+ &Unix_socket_group,
"", NULL, NULL
},
{
- {"unix_socket_directory", PGC_POSTMASTER}, &UnixSocketDir,
+ {"unix_socket_directory", PGC_POSTMASTER, CONN_AUTH_SETTINGS,
+ gettext_noop("The Unix-domain socket directory to listen to"),
+ NULL
+ },
+ &UnixSocketDir,
"", NULL, NULL
},
{
- {"virtual_host", PGC_POSTMASTER}, &VirtualHost,
+ {"virtual_host", PGC_POSTMASTER, CONN_AUTH_SETTINGS,
+ gettext_noop("The host name or IP address to listen to"),
+ NULL
+ },
+ &VirtualHost,
"", NULL, NULL
},
{
- {"wal_sync_method", PGC_SIGHUP}, &XLOG_sync_method,
+ {"wal_sync_method", PGC_SIGHUP, WAL_SETTINGS,
+ gettext_noop("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}, NULL, NULL, NULL, NULL
+ {NULL, 0, 0, NULL, NULL}, NULL, NULL, NULL, NULL
}
};
/*
* Actual lookup of variables is done through this single, sorted array.
*/
-static struct config_generic **guc_variables;
-static int num_guc_variables;
+struct config_generic **guc_variables;
+int num_guc_variables;
static bool guc_dirty; /* TRUE if need to do commit/abort work */
static int guc_var_compare(const void *a, const void *b);
-static void ReportGUCOption(struct config_generic *record);
+static void ReportGUCOption(struct config_generic * record);
static char *_ShowOption(struct config_generic * record);
* re-executed after startup (eg, we could allow loadable modules to
* add vars, and then we'd need to re-sort).
*/
-static void
+void
build_guc_variables(void)
{
int num_vars = 0;
for (i = 0; i < num_guc_variables; i++)
{
struct config_generic *gconf = guc_variables[i];
- bool changed;
+ bool changed;
/* Skip if nothing's happened to this var in this transaction */
if (gconf->status == 0)
* ReportGUCOption: if appropriate, transmit option value to frontend
*/
static void
-ReportGUCOption(struct config_generic *record)
+ReportGUCOption(struct config_generic * record)
{
if (reporting_enabled && (record->flags & GUC_REPORT))
{
- char *val = _ShowOption(record);
+ char *val = _ShowOption(record);
StringInfoData msgbuf;
pq_beginmessage(&msgbuf, 'S');
}
if (DoIt && (record->flags & GUC_REPORT))
- ReportGUCOption(record);
+ ReportGUCOption(record);
return true;
}
void
write_nondefault_variables(GucContext context)
{
- int i;
- char *new_filename, *filename;
- int elevel;
- FILE *fp;
+ int i;
+ char *new_filename,
+ *filename;
+ int elevel;
+ FILE *fp;
Assert(context == PGC_POSTMASTER || context == PGC_SIGHUP);
Assert(DataDir);
* Open file
*/
new_filename = malloc(strlen(DataDir) + strlen(CONFIG_EXEC_PARAMS) +
- strlen(".new") + 2);
+ strlen(".new") + 2);
filename = malloc(strlen(DataDir) + strlen(CONFIG_EXEC_PARAMS) + 2);
if (new_filename == NULL || filename == NULL)
{
sprintf(new_filename, "%s/" CONFIG_EXEC_PARAMS ".new", DataDir);
sprintf(filename, "%s/" CONFIG_EXEC_PARAMS, DataDir);
- fp = AllocateFile(new_filename, "w");
- if (!fp)
- {
- free(new_filename);
+ fp = AllocateFile(new_filename, "w");
+ if (!fp)
+ {
+ free(new_filename);
free(filename);
elog(elevel, "could not write exec config params file `"
- CONFIG_EXEC_PARAMS "': %s", strerror(errno));
+ CONFIG_EXEC_PARAMS "': %s", strerror(errno));
return;
}
static char *
read_string_with_null(FILE *fp)
{
- int i = 0, ch, maxlen = 256;
- char *str = NULL;
+ int i = 0,
+ ch,
+ maxlen = 256;
+ char *str = NULL;
do
{
void
read_nondefault_variables(void)
{
- char *filename;
- FILE *fp;
- char *varname, *varvalue;
- int varsource;
+ char *filename;
+ FILE *fp;
+ char *varname,
+ *varvalue;
+ int varsource;
Assert(DataDir);
}
sprintf(filename, "%s/" CONFIG_EXEC_PARAMS, DataDir);
- fp = AllocateFile(filename, "r");
- if (!fp)
- {
+ fp = AllocateFile(filename, "r");
+ if (!fp)
+ {
free(filename);
- /* File not found is fine */
- if (errno != ENOENT)
- elog(FATAL, "could not read exec config params file `"
- CONFIG_EXEC_PARAMS "': %s", strerror(errno));
+ /* File not found is fine */
+ if (errno != ENOENT)
+ elog(FATAL, "could not read exec config params file `"
+ CONFIG_EXEC_PARAMS "': %s", strerror(errno));
return;
- }
+ }
- while (1)
+ while (1)
{
if ((varname = read_string_with_null(fp)) == NULL)
break;
if ((varvalue = read_string_with_null(fp)) == NULL)
elog(FATAL, "Invalid format of exec config params file");
- if (fread(&varsource, sizeof(varsource), 1, fp) == 0)
+ if (fread(&varsource, sizeof(varsource), 1, fp) == 0)
elog(FATAL, "Invalid format of exec config params file");
(void) set_config_option(varname, varvalue, PGC_POSTMASTER,
- varsource, false, true);
+ varsource, false, true);
free(varname);
free(varvalue);
}
static const char *
assign_log_min_messages(const char *newval,
- bool doit, bool interactive)
+ bool doit, bool interactive)
{
return (assign_msglvl(&log_min_messages, newval, doit, interactive));
}
#include "guc-file.c"
-