aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/src/sgml/runtime.sgml536
-rw-r--r--src/backend/main/main.c13
-rw-r--r--src/backend/tcop/postgres.c5
-rw-r--r--src/backend/utils/misc/Makefile4
-rw-r--r--src/backend/utils/misc/guc.c1128
-rw-r--r--src/backend/utils/misc/help_config.c461
-rw-r--r--src/backend/utils/misc/postgresql.conf.sample229
-rw-r--r--src/bin/initdb/initdb.sh12
-rw-r--r--src/include/utils/guc_tables.h178
-rw-r--r--src/include/utils/help_config.h17
10 files changed, 1898 insertions, 685 deletions
diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml
index 3f6a2b350db..dd950c78dc9 100644
--- a/doc/src/sgml/runtime.sgml
+++ b/doc/src/sgml/runtime.sgml
@@ -1,5 +1,5 @@
<!--
-$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">
@@ -710,6 +710,18 @@ SET ENABLE_SEQSCAN TO OFF;
</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>
@@ -748,23 +760,23 @@ SET ENABLE_SEQSCAN TO OFF;
</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>
@@ -905,8 +917,8 @@ SET ENABLE_SEQSCAN TO OFF;
</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>
@@ -957,7 +969,9 @@ SET ENABLE_SEQSCAN TO OFF;
<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>
@@ -967,7 +981,7 @@ SET ENABLE_SEQSCAN TO OFF;
</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
@@ -1020,14 +1034,6 @@ SET ENABLE_SEQSCAN TO OFF;
</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.
</para>
@@ -1056,7 +1062,7 @@ SET ENABLE_SEQSCAN TO OFF;
<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>
@@ -1288,9 +1294,18 @@ SET ENABLE_SEQSCAN TO OFF;
</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>
@@ -1313,21 +1328,11 @@ SET ENABLE_SEQSCAN TO OFF;
</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>
@@ -1395,20 +1400,23 @@ SET ENABLE_SEQSCAN TO OFF;
</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>
@@ -1437,25 +1445,13 @@ SET ENABLE_SEQSCAN TO OFF;
</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>
@@ -1512,88 +1508,6 @@ SET ENABLE_SEQSCAN TO OFF;
<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>
@@ -1699,6 +1613,90 @@ SET ENABLE_SEQSCAN TO OFF;
</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>
@@ -1811,6 +1809,95 @@ SET ENABLE_SEQSCAN TO OFF;
</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>
@@ -2007,6 +2094,16 @@ SET ENABLE_SEQSCAN TO OFF;
</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>
@@ -2074,18 +2171,8 @@ SET ENABLE_SEQSCAN TO OFF;
</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>
@@ -2093,18 +2180,15 @@ SET ENABLE_SEQSCAN TO OFF;
<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</></>
@@ -2151,105 +2235,14 @@ dynamic_library_path = '/usr/local/lib/postgresql:/home/my_project/lib:$libdir'
</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>
@@ -2365,15 +2358,6 @@ dynamic_library_path = '/usr/local/lib/postgresql:/home/my_project/lib:$libdir'
<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</></>
<listitem>
@@ -2421,14 +2405,16 @@ dynamic_library_path = '/usr/local/lib/postgresql:/home/my_project/lib:$libdir'
</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>
@@ -2451,6 +2437,19 @@ dynamic_library_path = '/usr/local/lib/postgresql:/home/my_project/lib:$libdir'
</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>
<para>
@@ -2458,19 +2457,20 @@ dynamic_library_path = '/usr/local/lib/postgresql:/home/my_project/lib:$libdir'
<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.
@@ -2482,7 +2482,7 @@ dynamic_library_path = '/usr/local/lib/postgresql:/home/my_project/lib:$libdir'
<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>
diff --git a/src/backend/main/main.c b/src/backend/main/main.c
index c86b45b132f..e03633a3261 100644
--- a/src/backend/main/main.c
+++ b/src/backend/main/main.c
@@ -13,7 +13,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/main/main.c,v 1.57 2003/05/15 16:35:28 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/main/main.c,v 1.58 2003/07/04 16:41:21 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -37,6 +37,7 @@
#include "miscadmin.h"
#include "bootstrap/bootstrap.h"
#include "tcop/tcopprot.h"
+#include "utils/help_config.h"
#include "utils/ps_status.h"
@@ -198,7 +199,7 @@ main(int argc, char *argv[])
}
/*
- * Now dispatch to one of PostmasterMain, PostgresMain, or
+ * Now dispatch to one of PostmasterMain, PostgresMain, GucInfoMain, or
* BootstrapMain depending on the program name (and possibly first
* argument) we were called with. The lack of consistency here is
* historical.
@@ -219,6 +220,14 @@ main(int argc, char *argv[])
exit(BootstrapMain(argc - 1, new_argv + 1));
/*
+ * If the first argument is "--help-config", then invoke runtime
+ * configuration option display mode.
+ * We remove "--help-config" from the arguments passed on to GucInfoMain.
+ */
+ if (argc > 1 && strcmp(new_argv[1], "--help-config") == 0)
+ exit(GucInfoMain(argc - 1, new_argv + 1));
+
+ /*
* Otherwise we're a standalone backend. Invoke PostgresMain,
* specifying current userid as the "authenticated" Postgres user
* name.
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index 3ac145860b4..c3480d803cf 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.348 2003/06/20 21:58:02 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.349 2003/07/04 16:41:21 tgl Exp $
*
* NOTES
* this is the "main" module of the postgres backend and
@@ -1910,6 +1910,7 @@ usage(char *progname)
printf(" -P disable system indexes\n");
printf(" -s show statistics after each query\n");
printf(" -S SORT-MEM set amount of memory for sorts (in kbytes)\n");
+ printf(" --help-config show configuration options, then exit. Details: --help-config -h\n");
printf(" --help show this help, then exit\n");
printf(" --version output version information, then exit\n");
printf("\nDeveloper options:\n");
@@ -2547,7 +2548,7 @@ PostgresMain(int argc, char *argv[], const char *username)
if (!IsUnderPostmaster)
{
puts("\nPOSTGRES backend interactive interface ");
- puts("$Revision: 1.348 $ $Date: 2003/06/20 21:58:02 $\n");
+ puts("$Revision: 1.349 $ $Date: 2003/07/04 16:41:21 $\n");
}
/*
diff --git a/src/backend/utils/misc/Makefile b/src/backend/utils/misc/Makefile
index 1f440a19e16..5078e1c850e 100644
--- a/src/backend/utils/misc/Makefile
+++ b/src/backend/utils/misc/Makefile
@@ -1,4 +1,4 @@
-# $Header: /cvsroot/pgsql/src/backend/utils/misc/Makefile,v 1.20 2002/11/01 22:52:33 tgl Exp $
+# $Header: /cvsroot/pgsql/src/backend/utils/misc/Makefile,v 1.21 2003/07/04 16:41:21 tgl Exp $
subdir = src/backend/utils/misc
top_builddir = ../../../..
@@ -6,7 +6,7 @@ include $(top_builddir)/src/Makefile.global
override CPPFLAGS := -I$(srcdir) $(CPPFLAGS)
-OBJS = database.o superuser.o guc.o ps_status.o
+OBJS = database.o superuser.o guc.o help_config.o ps_status.o
# This location might depend on the installation directories. Therefore
# we can't subsitute it into config.h.
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 6e0da5bbaab..fc626169ec0 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -10,11 +10,10 @@
* 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>
@@ -23,6 +22,7 @@
#include <unistd.h>
#include "utils/guc.h"
+#include "utils/guc_tables.h"
#include "access/xlog.h"
#include "catalog/namespace.h"
@@ -56,8 +56,6 @@
#include "utils/pg_locale.h"
#include "pgstat.h"
-int log_min_duration_statement = 0;
-
#ifndef PG_KRB_SRVTAB
#define PG_KRB_SRVTAB ""
@@ -87,7 +85,7 @@ static const char *assign_facility(const char *facility,
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,
@@ -95,7 +93,7 @@ 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);
@@ -130,6 +128,8 @@ int log_min_error_statement = PANIC;
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
@@ -156,110 +156,6 @@ static char *timezone_string;
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) \
@@ -300,8 +196,53 @@ struct config_string
} 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*
@@ -325,299 +266,588 @@ struct config_string
/******** 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
@@ -630,350 +860,645 @@ static struct config_int
* 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}, &regex_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")
+ },
+ &regex_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
}
};
@@ -983,8 +1508,8 @@ static struct config_string
/*
* 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 */
@@ -994,7 +1519,7 @@ static char *guc_string_workspace; /* for avoiding memory leaks */
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);
@@ -1003,7 +1528,7 @@ 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;
@@ -1437,7 +1962,7 @@ AtEOXact_GUC(bool isCommit)
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)
@@ -1601,11 +2126,11 @@ BeginReportingGUCOptions(void)
* 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');
@@ -2211,7 +2736,7 @@ set_config_option(const char *name, const char *value,
}
if (DoIt && (record->flags & GUC_REPORT))
- ReportGUCOption(record);
+ ReportGUCOption(record);
return true;
}
@@ -2890,10 +3415,11 @@ _ShowOption(struct config_generic * record)
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);
@@ -2903,7 +3429,7 @@ write_nondefault_variables(GucContext context)
* 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)
{
@@ -2913,13 +3439,13 @@ write_nondefault_variables(GucContext context)
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;
}
@@ -2994,8 +3520,10 @@ write_nondefault_variables(GucContext context)
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
{
@@ -3024,10 +3552,11 @@ read_string_with_null(FILE *fp)
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);
@@ -3042,29 +3571,29 @@ read_nondefault_variables(void)
}
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);
}
@@ -3384,7 +3913,7 @@ 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)
{
return (assign_msglvl(&log_min_messages, newval, doit, interactive));
}
@@ -3513,4 +4042,3 @@ assign_phony_autocommit(bool newval, bool doit, bool interactive)
#include "guc-file.c"
-
diff --git a/src/backend/utils/misc/help_config.c b/src/backend/utils/misc/help_config.c
new file mode 100644
index 00000000000..0ea1fbd99d6
--- /dev/null
+++ b/src/backend/utils/misc/help_config.c
@@ -0,0 +1,461 @@
+/*-------------------------------------------------------------------------
+ * help_config.c
+ *
+ * Displays available options under grand unified configuration scheme
+ *
+ * The purpose of this option is to list, sort, and make searchable, all
+ * runtime options available to Postgresql, by their description and grouping.
+ *
+ * Valid command-line options to this program:
+ *
+ * none : All available variables are sorted by group and name
+ * and formatted nicely. ( for human consumption )
+ * <string> : list all the variables whose name matches this string
+ * -g <string> : list all the variables whose group matches this string
+ * -l : lists all currently defined groups and terminates
+ * -G : no sort by groups (you get strict name order, instead)
+ * -m : output the list in Machine friendly format, with a header row
+ * -M : same as m, except no header
+ * -h : help
+ *
+ * Options whose flag bits are set to GUC_NO_SHOW_ALL, GUC_NOT_IN_SAMPLE,
+ * or GUC_DISALLOW_IN_FILE are not displayed, unless the user specifically
+ * requests that variable by name
+ *
+ * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ * $Header: /cvsroot/pgsql/src/backend/utils/misc/help_config.c,v 1.1 2003/07/04 16:41:21 tgl Exp $
+ *
+ *-------------------------------------------------------------------------
+ */
+#include "postgres.h"
+
+#include <fcntl.h>
+#ifdef HAVE_GETOPT_H
+#include <getopt.h>
+#endif
+#include <errno.h>
+#include <float.h>
+#include <limits.h>
+#include <unistd.h>
+
+#include "utils/guc.h"
+#include "utils/guc_tables.h"
+#include "utils/help_config.h"
+
+extern int optind;
+extern char *optarg;
+
+
+/*
+ * The following char constructs provide the different formats the variables
+ * can be outputted in.
+ */
+enum outputFormat
+{
+ HUMAN_OUTPUT,
+ MACHINE_OUTPUT
+};
+
+static const char * const GENERIC_FORMAT[] = {
+ gettext_noop("Name : %-20s \nContext : %-20s \nGroup : %-20s\n"),
+ gettext_noop("%s\t%s\t%s\t")
+};
+static const char * const GENERIC_DESC[] = {
+ gettext_noop("Description: %s\n%s\n"),
+ gettext_noop("%s %s\n")
+};
+static const char * const BOOL_FORMAT[] = {
+ gettext_noop("Type : BOOL\nReset Value: %-s \n"),
+ gettext_noop("BOOL\t%s\t\t\t")
+};
+static const char * const INT_FORMAT[] = {
+ gettext_noop("Type : INT\nReset Value: %-20d \nMin Value : %-20d \nMax Value : %-20d \n"),
+ gettext_noop("INT\t%d\t%d\t%d\t")
+};
+static const char * const REAL_FORMAT[] = {
+ gettext_noop("Type : REAL\nReset Value: %-20g \nMin Value : %-20g \nMax Value : %-20g \n"),
+ gettext_noop("REAL\t%g\t%g\t%g\t")
+};
+static const char * const STRING_FORMAT[] = {
+ gettext_noop("Type : STRING\nReset Value: %-s \n"),
+ gettext_noop("STRING\t%s\t\t\t")
+};
+static const char * const COLUMN_HEADER[] = {
+ "",
+ gettext_noop("NAME\tCONTEXT\tGROUP\tTYPE\tRESET_VALUE\tMIN\tMAX\tSHORT_DESCRIPTION\tLONG_DESCRIPTION\n")
+};
+static const char * const ROW_SEPARATOR[] = {
+ "------------------------------------------------------------\n",
+ ""
+};
+
+/*
+ * Variables loaded from the command line
+ */
+static char *nameString = NULL; /* The var name pattern to match */
+static bool nameRegexBool = false; /* Match the name pattern as a
+ * regex */
+static char *groupString = NULL; /* The var group pattern to match */
+static bool groupRegexBool = false; /* Match the group pattern as a
+ * regex */
+static enum outputFormat outFormat = HUMAN_OUTPUT;
+static bool suppressAllHeaders = false; /* MACHINE_OUTPUT output, no column
+ * headers */
+static bool groupResults = true; /* sort result list by groups */
+
+
+/*
+ * This union allows us to mix the numerous different types of structs
+ * that we are organizing.
+ */
+typedef union
+{
+ struct config_generic generic;
+ struct config_bool bool;
+ struct config_real real;
+ struct config_int integer;
+ struct config_string string;
+} mixedStruct;
+
+
+/* function prototypes */
+static bool varMatches(mixedStruct * structToTest);
+static int compareMixedStructs(const void *, const void *);
+static mixedStruct **varsToDisplay(int *resultListSize);
+static const char *usageErrMsg(void);
+static void helpMessage(void);
+static void listAllGroups(void);
+static void printGenericHead(struct config_generic structToPrint);
+static void printGenericFoot(struct config_generic structToPrint);
+static void printMixedStruct(mixedStruct * structToPrint);
+static bool displayStruct(mixedStruct * structToDisplay);
+
+/*
+ * This array contains the display names for each of the GucContexts available
+ *
+ * Note: these strings are deliberately not localized.
+ */
+static const char *const GucContext_names[] = {
+ "INTERNAL",
+ "POSTMASTER",
+ "SIGHUP",
+ "BACKEND",
+ "SUSET",
+ "USERSET"
+};
+
+/*
+ * Reads in the the command line options and sets the state of the program
+ * accordingly. Initializes the result list and sorts it.
+ */
+int
+GucInfoMain(int argc, char *argv[])
+{
+ mixedStruct **varList;
+ int resultListSize;
+ int c;
+ int i;
+
+ while ((c = getopt(argc, argv, "g:rGmMlh")) != -1)
+ {
+ switch (c)
+ {
+ case 'g':
+ groupString = optarg;
+ break;
+ case 'r': /* not actually implemented yet */
+ nameRegexBool = true;
+ break;
+ case 'G':
+ groupResults = false;
+ break;
+ case 'm':
+ outFormat = MACHINE_OUTPUT;
+ break;
+ case 'M':
+ outFormat = MACHINE_OUTPUT;
+ suppressAllHeaders = true;
+ break;
+ case 'l':
+ listAllGroups();
+ exit(0);
+ case 'h':
+ helpMessage();
+ exit(0);
+
+ default:
+ fprintf(stderr, gettext("%s \n Try -h for further details\n"), usageErrMsg());
+ exit(1);
+ }
+ }
+
+ if (optind < argc)
+ nameString = argv[optind];
+
+ /* get the list of variables that match the user's specs. */
+ varList = varsToDisplay(&resultListSize);
+
+ /* sort them by group if desired */
+ /* (without this, we get the original sort by name from guc.c) */
+ if (groupResults)
+ qsort(varList, resultListSize,
+ sizeof(mixedStruct *), compareMixedStructs);
+
+ /* output the results */
+ if (!suppressAllHeaders)
+ printf(gettext(COLUMN_HEADER[outFormat]));
+
+ for (i = 0; varList[i] != NULL; i++)
+ {
+ printf(gettext(ROW_SEPARATOR[outFormat]));
+ printMixedStruct(varList[i]);
+ }
+
+ return 0;
+}
+
+
+/*
+ * This function is used to compare two mixedStruct types. It compares based
+ * on the value of the 'group' field, and then the name of the variable.
+ * Each void* is expected to be a pointer to a pointer to a struct.
+ * (This is because it is used by qsort to sort an array of struct pointers)
+ *
+ * Returns an integer less than, equal to, or greater than zero if the first
+ * argument (struct1) is considered to be respectively less than, equal to,
+ * or greater than the second (struct2). The comparison is made frist on the
+ * value of struct{1,2}.generic.group and then struct{1,2}.generic.name. The
+ * groups will display in the order they are defined in enum config_group
+ */
+static int
+compareMixedStructs(const void *struct1, const void *struct2)
+{
+ mixedStruct *structVar1 = *(mixedStruct **) struct1;
+ mixedStruct *structVar2 = *(mixedStruct **) struct2;
+
+ if (structVar1->generic.group > structVar2->generic.group)
+ return 1;
+ else if (structVar1->generic.group < structVar2->generic.group)
+ return -1;
+ else
+ return strcmp(structVar1->generic.name, structVar2->generic.name);
+}
+
+
+/*
+ * This function returns a complete list of all the variables to display,
+ * according to what the user wants to see.
+ */
+static mixedStruct **
+varsToDisplay(int *resultListSize)
+{
+ mixedStruct **resultList;
+ int arrayIndex;
+ int i;
+
+ /* Initialize the guc_variables[] array */
+ build_guc_variables();
+
+ /* Extract just the ones we want to display */
+ resultList = malloc((num_guc_variables + 1) * sizeof(mixedStruct *));
+ arrayIndex = 0;
+
+ for (i = 0; i < num_guc_variables; i++)
+ {
+ mixedStruct *var = (mixedStruct *) guc_variables[i];
+
+ if (varMatches(var))
+ resultList[arrayIndex++] = var;
+ }
+
+ /* add an end marker */
+ resultList[arrayIndex] = NULL;
+
+ *resultListSize = arrayIndex;
+ return resultList;
+}
+
+
+/*
+ * This function will return true if the struct passed to it
+ * should be displayed to the user.
+ *
+ * The criteria to determine if the struct should not be displayed is:
+ * + It's flag bits are set to GUC_NO_SHOW_ALL
+ * + It's flag bits are set to GUC_NOT_IN_SAMPLE
+ * + It's flag bits are set to GUC_DISALLOW_IN_FILE
+ */
+static bool
+displayStruct(mixedStruct * structToDisplay)
+{
+ if (structToDisplay->generic.flags & (GUC_NO_SHOW_ALL |
+ GUC_NOT_IN_SAMPLE |
+ GUC_DISALLOW_IN_FILE))
+ return false;
+ else
+ return true;
+}
+
+
+/*
+ * Used to determine if a variable matches the user's specifications (stored in
+ * global variables). Returns true if this particular variable information should
+ * be returned to the user.
+ */
+static bool
+varMatches(mixedStruct * structToTest)
+{
+ bool matches = false;
+ bool specificSearch = false; /* This is true if the user
+ * searched for a variable in
+ * particular. */
+
+ if (nameString != NULL && !nameRegexBool)
+ {
+ if (strstr(structToTest->generic.name, nameString) != NULL)
+ {
+ matches = true;
+ specificSearch = true;
+ }
+ }
+
+ if (nameString != NULL && nameRegexBool)
+ {
+ /* We do not support this option yet */
+ }
+
+ if (groupString != NULL && !groupRegexBool)
+ {
+ if (strstr(config_group_names[structToTest->generic.group], groupString) != NULL)
+ {
+ if (nameString != NULL)
+ matches = (matches && true);
+ else
+ matches = true;
+ }
+ else
+ matches = false;
+ }
+
+ if (groupString != NULL && groupRegexBool)
+ {
+ /* We do not support this option yet */
+ }
+
+ /* return all variables */
+ if (nameString == NULL && groupString == NULL)
+ matches = true;
+
+ if (specificSearch)
+ return matches;
+ else
+ return matches && displayStruct(structToTest);
+}
+
+
+/*
+ * This function prints out the generic struct passed to it. It will print out
+ * a different format, depending on what the user wants to see.
+ */
+static void
+printMixedStruct(mixedStruct * structToPrint)
+{
+ printGenericHead(structToPrint->generic);
+
+ switch (structToPrint->generic.vartype)
+ {
+
+ case PGC_BOOL:
+ printf(gettext(BOOL_FORMAT[outFormat]),
+ (structToPrint->bool.reset_val == 0) ?
+ gettext("FALSE") : gettext("TRUE"));
+ break;
+
+ case PGC_INT:
+ printf(gettext(INT_FORMAT[outFormat]),
+ structToPrint->integer.reset_val,
+ structToPrint->integer.min,
+ structToPrint->integer.max);
+ break;
+
+ case PGC_REAL:
+ printf(gettext(REAL_FORMAT[outFormat]),
+ structToPrint->real.reset_val,
+ structToPrint->real.min,
+ structToPrint->real.max);
+ break;
+
+ case PGC_STRING:
+ printf(gettext(STRING_FORMAT[outFormat]),
+ structToPrint->string.boot_val);
+ break;
+
+ default:
+ printf(gettext("Unrecognized variable type!\n"));
+ break;
+ }
+
+ printGenericFoot(structToPrint->generic);
+}
+
+static void
+printGenericHead(struct config_generic structToPrint)
+{
+ printf(gettext(GENERIC_FORMAT[outFormat]),
+ structToPrint.name,
+ GucContext_names[structToPrint.context],
+ gettext(config_group_names[structToPrint.group]));
+}
+
+static void
+printGenericFoot(struct config_generic sPrint)
+{
+ printf(gettext(GENERIC_DESC[outFormat]),
+ (sPrint.short_desc == NULL) ? "" : gettext(sPrint.short_desc),
+ (sPrint.long_desc == NULL) ? "" : gettext(sPrint.long_desc));
+}
+
+static void
+listAllGroups(void)
+{
+ int i;
+
+ printf(gettext("All currently defined groups\n"));
+ printf(gettext("----------------------------\n"));
+ for (i = 0; config_group_names[i] != NULL; i++)
+ printf(gettext("%s\n"), gettext(config_group_names[i]));
+}
+
+static const char *
+usageErrMsg(void)
+{
+ return gettext("Usage for --help-config option: [-h] [-g <group>] [-l] [-G] [-m] [-M] [string]\n");
+}
+
+static void
+helpMessage(void)
+{
+ printf(gettext("Description:\n"
+ "--help-config displays all the runtime options available in PostgreSQL.\n"
+ "It groups them by category and sorts them by name. If available, it will\n"
+ "present a short description, default, max and min values as well as other\n"
+ "information about each option.\n\n"
+ "With no options specified, it will output all available runtime options\n"
+ "in human friendly format, grouped by category and sorted by name.\n\n"
+
+ "%s\n"
+
+ "General Options:\n"
+ " [string] All options with names that match this string\n"
+ " -g GROUP All options in categories that match GROUP\n"
+ " -l Prints list of all groups / subgroups\n"
+ " -h Prints this help message\n"
+ "\nOutput Options:\n"
+ " -G Do not group by category\n"
+ " -m Machine friendly format: tab separated fields\n"
+ " -M Same as m, except header with column names is suppressed\n"),
+ usageErrMsg()
+ );
+}
diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample
index 57c6e55cb22..73332106927 100644
--- a/src/backend/utils/misc/postgresql.conf.sample
+++ b/src/backend/utils/misc/postgresql.conf.sample
@@ -27,70 +27,83 @@
#
# Connection Parameters
#
-#tcpip_socket = false
-#ssl = false
+# CONNECTIONS AND AUTHENTICATION
+# ----------------------------------
+# Connection Settings
+
+#tcpip_socket = false
#max_connections = 32
+ # note: increasing max_connections costs about 500 bytes of shared
+ # memory per connection slot, in addition to costs from shared_buffers
+ # and max_locks_per_transaction.
#superuser_reserved_connections = 2
-
-#port = 5432
-
+#port = 5432
#unix_socket_directory = ''
#unix_socket_group = ''
#unix_socket_permissions = 0777 # octal
-
#virtual_host = ''
+# Security & Authentication
+
+#authentication_timeout = 60 # 1-600, in seconds
+#ssl = false
+#password_encryption = true
#krb_server_keyfile = ''
+#db_user_namespace = false
-#
-# Shared Memory Size
-#
+# RESOURCE USAGE (except WAL)
+# ---------------------------------
+# Memory
+
#shared_buffers = 64 # min 16, at least max_connections*2, 8KB each
-#max_locks_per_transaction = 64 # min 10, ~260*max_connections bytes each
-#wal_buffers = 8 # min 4, 8KB each
-# fsm = free space map
-#max_fsm_relations = 1000 # min 100, ~50 bytes each
+#sort_mem = 1024 # min 64, size in KB
+#vacuum_mem = 8192 # min 1024, size in KB
+
+# Free Space Map
+
#max_fsm_pages = 20000 # min max_fsm_relations*16, 6 bytes each
-# note: increasing max_connections also costs about 500 bytes each,
-# in addition to costs from shared_buffers and max_locks_per_transaction.
+#max_fsm_relations = 1000 # min 100, ~50 bytes each
+# Kernel Resource Usage
-#
-# Non-shared Memory Sizes
-#
-#sort_mem = 1024 # min 64, size in KB
-#vacuum_mem = 8192 # min 1024, size in KB
+#max_files_per_process = 1000 # min 25
+#preload_libraries = ''
-#
-# Write-ahead log (WAL)
-#
+# WRITE AHEAD LOG
+# ---------------------------------
+# Settings
+
+#fsync = true # turns forced synchronization on or off
+#wal_sync_method = fsync # the default varies across platforms:
+ # fsync, fdatasync, open_sync, or open_datasync
+#wal_buffers = 8 # min 4, 8KB each
+
+# Checkpoints
+
#checkpoint_segments = 3 # in logfile segments, min 1, 16MB each
#checkpoint_timeout = 300 # range 30-3600, in seconds
#checkpoint_warning = 30 # 0 is off, in seconds
-#
#commit_delay = 0 # range 0-100000, in microseconds
#commit_siblings = 5 # range 1-1000
-#
-#fsync = true
-#wal_sync_method = fsync # the default varies across platforms:
-# # fsync, fdatasync, open_sync, or open_datasync
-#wal_debug = 0 # range 0-16
-#
-# Optimizer Parameters
-#
-#enable_seqscan = true
-#enable_indexscan = true
-#enable_tidscan = true
-#enable_sort = true
+# QUERY TUNING
+# --------------------------------
+# Planner Method Enabling
+
#enable_hashagg = true
-#enable_nestloop = true
-#enable_mergejoin = true
#enable_hashjoin = true
+#enable_indexscan = true
+#enable_mergejoin = true
+#enable_nestloop = true
+#enable_seqscan = true
+#enable_sort = true
+#enable_tidscan = true
+
+# Planner Cost Constants
#effective_cache_size = 1000 # typically 8KB each
#random_page_cost = 4 # units are one sequential page fetch cost
@@ -98,117 +111,127 @@
#cpu_index_tuple_cost = 0.001 # (same)
#cpu_operator_cost = 0.0025 # (same)
-#from_collapse_limit = 8
-#join_collapse_limit = 8 # 1 disables collapsing of explicit JOINs
-
-#default_statistics_target = 10 # range 1-1000
+# Genetic Query Optimizer
-#
-# GEQO Optimizer Parameters
-#
#geqo = true
-#geqo_selection_bias = 2.0 # range 1.5-2.0
#geqo_threshold = 11
-#geqo_pool_size = 0 # default based on tables in statement,
- # range 128-1024
#geqo_effort = 1
#geqo_generations = 0
-#geqo_random_seed = -1 # auto-compute seed
+#geqo_pool_size = 0 # default based on tables in statement,
+ # range 128-1024
+#geqo_random_seed = -1 # -1 = use variable seed
+#geqo_selection_bias = 2.0 # range 1.5-2.0
+# Other Planner Options
+
+#default_statistics_target = 10 # range 1-1000
+#from_collapse_limit = 8
+#join_collapse_limit = 8 # 1 disables collapsing of explicit JOINs
+
+
+# ERROR REPORTING AND LOGGING
+# ------------------------------------
+# Syslog
+
+#syslog = 0 # range 0-2
+#syslog_facility = 'LOCAL0'
+#syslog_ident = 'postgres'
+
+# When to Log
-#
-# Message display
-#
#client_min_messages = notice # Values, in order of decreasing detail:
# debug5, debug4, debug3, debug2, debug1,
# log, info, notice, warning, error
+
#log_min_messages = notice # Values, in order of decreasing detail:
# debug5, debug4, debug3, debug2, debug1,
# info, notice, warning, error, log, fatal,
# panic
-#log_error_verbosity = default # terse, default, or verbose messages
-
-#silent_mode = false
-
-#log_connections = false
-#log_hostname = false
-#log_source_port = false
-#log_pid = false
-#log_statement = false
-#log_duration = false
-#log_timestamp = false
+#log_error_verbosity = default # terse, default, or verbose messages
#log_min_error_statement = panic # Values in order of increasing severity:
# debug5, debug4, debug3, debug2, debug1,
# info, notice, warning, error, panic(off)
-
+
#log_min_duration_statement = 0 # Log all statements whose
# execution time exceeds the value, in
# milliseconds. Zero disables.
+#silent_mode = false # DO NOT USE without Syslog!
+
+# What to Log
+
#debug_print_parse = false
#debug_print_rewritten = false
#debug_print_plan = false
#debug_pretty_print = false
+#log_connections = false
+#log_duration = false
+#log_pid = false
+#log_statement = false
+#log_timestamp = false
+#log_hostname = false
+#log_source_port = false
-#explain_pretty_print = true
-
-# requires USE_ASSERT_CHECKING
-#debug_assertions = true
-
-
-#
-# Syslog
-#
-#syslog = 0 # range 0-2
-#syslog_facility = 'LOCAL0'
-#syslog_ident = 'postgres'
-
+# RUNTIME STATISTICS
+# -------------------------------------
+# Statistics Monitoring
-#
-# Statistics
-#
#log_parser_stats = false
#log_planner_stats = false
#log_executor_stats = false
#log_statement_stats = false
-# requires BTREE_BUILD_STATS
-#log_btree_build_stats = false
-
+# Query/Index Statistics Collector
-#
-# Access statistics collection
-#
#stats_start_collector = true
-#stats_reset_on_server_start = true
#stats_command_string = false
-#stats_row_level = false
#stats_block_level = false
+#stats_row_level = false
+#stats_reset_on_server_start = true
-#
-# Misc
-#
-#dynamic_library_path = '$libdir'
+# CLIENT CONNECTION DEFAULTS
+# -------------------------------------
+# Statement Behavior
+
#search_path = '$user,public' # schema names
+#default_transaction_isolation = 'read committed'
+#default_transaction_read_only = false
+#statement_timeout = 0 # 0 is disabled, in milliseconds
+
+# Locale and Formatting
+
#datestyle = 'iso, us'
#timezone = unknown # actually, defaults to TZ environment setting
#australian_timezones = false
-#client_encoding = sql_ascii # actually, defaults to database encoding
-#authentication_timeout = 60 # 1-600, in seconds
-#deadlock_timeout = 1000 # in milliseconds
-#default_transaction_isolation = 'read committed'
-#default_transaction_read_only = false
#extra_float_digits = 0 # min -15, max 2
+#client_encoding = sql_ascii # actually, defaults to database encoding
+
+# These settings are initialized by initdb -- they may be changed
+
+# Other Defaults
+
+#explain_pretty_print = true
+#dynamic_library_path = '$libdir'
#max_expr_depth = 10000 # min 10
-#max_files_per_process = 1000 # min 25
-#password_encryption = true
+
+# LOCK MANAGEMENT
+# -----------------------------------------
+
+#deadlock_timeout = 1000 # in milliseconds
+#max_locks_per_transaction = 64 # min 10, ~260*max_connections bytes each
+
+
+# VERSION/PLATFORM COMPATIBILITY
+# -----------------------------------------
+# Previous Postgres Versions
+
+#add_missing_from = true
#regex_flavor = advanced # advanced, extended, or basic
#sql_inheritance = true
+
+# Other Platforms & Clients
+
#transform_null_equals = false
-#statement_timeout = 0 # 0 is disabled, in milliseconds
-#db_user_namespace = false
-#preload_libraries = ''
-#add_missing_from = true
diff --git a/src/bin/initdb/initdb.sh b/src/bin/initdb/initdb.sh
index 0202a7c72b2..08fe399bfc5 100644
--- a/src/bin/initdb/initdb.sh
+++ b/src/bin/initdb/initdb.sh
@@ -27,7 +27,7 @@
# Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
# Portions Copyright (c) 1994, Regents of the University of California
#
-# $Header: /cvsroot/pgsql/src/bin/initdb/Attic/initdb.sh,v 1.192 2003/06/02 19:00:29 tgl Exp $
+# $Header: /cvsroot/pgsql/src/bin/initdb/Attic/initdb.sh,v 1.193 2003/07/04 16:41:21 tgl Exp $
#
#-------------------------------------------------------------------------
@@ -586,16 +586,12 @@ $ECHO_N "creating configuration files... "$ECHO_C
cp "$PG_HBA_SAMPLE" "$PGDATA"/pg_hba.conf || exit_nicely
cp "$PG_IDENT_SAMPLE" "$PGDATA"/pg_ident.conf || exit_nicely
(
- cat "$POSTGRESQL_CONF_SAMPLE"
- echo
- echo
- echo "#"
- echo "# Locale settings"
- echo "#"
- echo "# (initialized by initdb -- may be changed)"
+ trigger="# These settings are initialized by initdb -- they may be changed"
+ sed -n "1,/$trigger/p" "$POSTGRESQL_CONF_SAMPLE"
for cat in MESSAGES MONETARY NUMERIC TIME; do
echo "LC_$cat = '`pg_getlocale $cat`'"
done
+ sed -n "1,/$trigger/!p" "$POSTGRESQL_CONF_SAMPLE"
) > "$PGDATA"/postgresql.conf || exit_nicely
chmod 0600 "$PGDATA"/pg_hba.conf "$PGDATA"/pg_ident.conf \
diff --git a/src/include/utils/guc_tables.h b/src/include/utils/guc_tables.h
new file mode 100644
index 00000000000..e8ccfeefd00
--- /dev/null
+++ b/src/include/utils/guc_tables.h
@@ -0,0 +1,178 @@
+/*-------------------------------------------------------------------------
+ *
+ * guc_tables.h
+ * Declarations of tables used by GUC.
+ *
+ * See src/backend/utils/misc/README for design notes.
+ *
+ * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
+ *
+ * $Id: guc_tables.h,v 1.1 2003/07/04 16:41:22 tgl Exp $
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef GUC_TABLES
+#define GUC_TABLES 1
+
+/*
+ * Groupings to help organize all the run-time options for display.
+ *
+ * Keep this in sync with config_group_names[] in guc.c.
+ */
+enum config_group
+{
+ UNGROUPED,
+ CONN_AUTH,
+ CONN_AUTH_SETTINGS,
+ CONN_AUTH_SECURITY,
+ RESOURCES,
+ RESOURCES_MEM,
+ RESOURCES_FSM,
+ RESOURCES_KERNEL,
+ WAL,
+ WAL_SETTINGS,
+ WAL_CHECKPOINTS,
+ QUERY_TUNING,
+ QUERY_TUNING_METHOD,
+ QUERY_TUNING_COST,
+ QUERY_TUNING_GEQO,
+ QUERY_TUNING_OTHER,
+ LOGGING,
+ LOGGING_SYSLOG,
+ LOGGING_WHEN,
+ LOGGING_WHAT,
+ STATS,
+ STATS_MONITORING,
+ STATS_COLLECTOR,
+ CLIENT_CONN,
+ CLIENT_CONN_STATEMENT,
+ CLIENT_CONN_LOCALE,
+ CLIENT_CONN_OTHER,
+ LOCK_MANAGEMENT,
+ COMPAT_OPTIONS,
+ COMPAT_OPTIONS_PREVIOUS,
+ COMPAT_OPTIONS_CLIENT,
+ DEVELOPER_OPTIONS
+};
+
+
+/*
+ * GUC supports these types of variables:
+ */
+enum config_type
+{
+ PGC_BOOL,
+ PGC_INT,
+ PGC_REAL,
+ PGC_STRING
+};
+
+/*
+ * Generic fields applicable to all types of variables
+ *
+ * The short description should be less than 80 chars in length. Some
+ * applications may use the long description as well, and will append
+ * it to the short description. (separated by a newline or '. ')
+ */
+struct config_generic
+{
+ /* constant fields, must be set correctly in initial value: */
+ const char *name; /* name of variable - MUST BE FIRST */
+ GucContext context; /* context required to set the variable */
+ enum config_group group; /* to help organize variables by function */
+ const char *short_desc; /* short desc. of this variable's purpose */
+ const char *long_desc; /* long desc. of this variable's purpose */
+ int flags; /* flag bits, see below */
+ /* variable fields, initialized at runtime: */
+ enum config_type vartype; /* type of variable (set only at startup) */
+ int status; /* status bits, see below */
+ GucSource reset_source; /* source of the reset_value */
+ GucSource session_source; /* source of the session_value */
+ GucSource tentative_source; /* source of the tentative_value */
+ GucSource source; /* source of the current actual value */
+};
+
+/* bit values in flags field */
+#define GUC_LIST_INPUT 0x0001 /* input can be list format */
+#define GUC_LIST_QUOTE 0x0002 /* double-quote list elements */
+#define GUC_NO_SHOW_ALL 0x0004 /* exclude from SHOW ALL */
+#define GUC_NO_RESET_ALL 0x0008 /* exclude from RESET ALL */
+#define GUC_REPORT 0x0010 /* auto-report changes to client */
+#define GUC_NOT_IN_SAMPLE 0x0020 /* not in postgresql.conf.sample */
+#define GUC_DISALLOW_IN_FILE 0x0040 /* can't set in postgresql.conf */
+
+/* bit values in status field */
+#define GUC_HAVE_TENTATIVE 0x0001 /* tentative value is defined */
+#define GUC_HAVE_LOCAL 0x0002 /* a SET LOCAL has been executed */
+
+
+/* GUC records for specific variable types */
+
+struct config_bool
+{
+ struct config_generic gen;
+ /* these fields must be set correctly in initial value: */
+ /* (all but reset_val are constants) */
+ bool *variable;
+ bool reset_val;
+ bool (*assign_hook) (bool newval, bool doit, bool interactive);
+ const char *(*show_hook) (void);
+ /* variable fields, initialized at runtime: */
+ bool session_val;
+ bool tentative_val;
+};
+
+struct config_int
+{
+ struct config_generic gen;
+ /* these fields must be set correctly in initial value: */
+ /* (all but reset_val are constants) */
+ int *variable;
+ int reset_val;
+ int min;
+ int max;
+ bool (*assign_hook) (int newval, bool doit, bool interactive);
+ const char *(*show_hook) (void);
+ /* variable fields, initialized at runtime: */
+ int session_val;
+ int tentative_val;
+};
+
+struct config_real
+{
+ struct config_generic gen;
+ /* these fields must be set correctly in initial value: */
+ /* (all but reset_val are constants) */
+ double *variable;
+ double reset_val;
+ double min;
+ double max;
+ bool (*assign_hook) (double newval, bool doit, bool interactive);
+ const char *(*show_hook) (void);
+ /* variable fields, initialized at runtime: */
+ double session_val;
+ double tentative_val;
+};
+
+struct config_string
+{
+ struct config_generic gen;
+ /* these fields must be set correctly in initial value: */
+ /* (all are constants) */
+ char **variable;
+ const char *boot_val;
+ const char *(*assign_hook) (const char *newval, bool doit, bool interactive);
+ const char *(*show_hook) (void);
+ /* variable fields, initialized at runtime: */
+ char *reset_val;
+ char *session_val;
+ char *tentative_val;
+};
+
+extern const char * const config_group_names[];
+extern struct config_generic **guc_variables;
+extern int num_guc_variables;
+
+extern void build_guc_variables(void);
+
+#endif
diff --git a/src/include/utils/help_config.h b/src/include/utils/help_config.h
new file mode 100644
index 00000000000..45645f0216b
--- /dev/null
+++ b/src/include/utils/help_config.h
@@ -0,0 +1,17 @@
+/*-------------------------------------------------------------------------
+ *
+ * help_config.h
+ * Interface to the --help-config option of main.c
+ *
+ * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
+ *
+ * $Id: help_config.h,v 1.1 2003/07/04 16:41:22 tgl Exp $
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef HELP_CONFIG_H
+#define HELP_CONFIG_H 1
+
+extern int GucInfoMain(int argc, char *argv[]);
+
+#endif