Re-sending to hopefully avoid admin moderation rule. Fixing top-post as well.
On Wed, May 21, 2014 at 4:37 PM, Tom Lane <t...@sss.pgh.pa.us> wrote: > >> David G Johnston <david.g.johns...@gmail.com> writes: >> > Section 18.1.3 is named "18.1.3. Other Ways to Set Parameters" yet does >> not >> > reference the ability to use "set_config(...)" to make changes to >> > configuration parameters. >> >> Hm, yeah, seems like an oversight. >> >> Another thing I've never been terribly happy about is that pg_settings is >> mentioned only in the next sub-section. Could we merge that sub-section >> with 18.1.3? >> >> regards, tom lane >> > > > I am presuming that posting a doc-only patch here instead of -hackers is > acceptable. > > So I finally decided to setup a development environment and generate > actual patches. I have few in mind but I thought that these two changes > might be quick to implement. I thought wrong - mostly due to my desire to > improve things and not just "add and merge" some content. > > I focused my effort on 18.1.1 to 18.1.4 though the actual coverage of > sections 2-4 has changed considerably. I decided not to minimize > white-space changes in that region since because of the re-organization git > was unable, especially in a couple of instances, to match up before and > after anyway. The file itself does not have a consistent format and so I > just applied 2-space indentations at each level. I plan to go back and do > polishing but I first want to make sure that the end-user product is > acceptable. > > I've only hit this one file for the moment but figure on reviewing all of > the relevant cross-references for tweaks and consistency. I already did so > in passing and would not expect anything as invasive as what I am proposing > here - so if others feel these changes have merit I will plan on taking any > ideas and put forth a v2 patch that will hopefully be ready-to-commit. > > Thank you in advance for any attention and education you can provide. > > David J. >
diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 697cf99..6ac48d6 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -11,7 +11,7 @@ <para> There are many configuration parameters that affect the behavior of the database system. In the first section of this chapter, we - describe how to set configuration parameters. The subsequent sections + describe how to interact with configuration parameters. The subsequent sections discuss each parameter in detail. </para> @@ -24,46 +24,103 @@ <para> All parameter names are case-insensitive. Every parameter takes a value of one of five types: Boolean, integer, floating point, - string or enum. Boolean values can be written as <literal>on</literal>, - <literal>off</literal>, <literal>true</literal>, - <literal>false</literal>, <literal>yes</literal>, - <literal>no</literal>, <literal>1</literal>, <literal>0</literal> - (all case-insensitive) or any unambiguous prefix of these. + string or enum. </para> + <itemizedlist> + + <listitem> <para> - Some settings specify a memory or time value. Each of these has an - implicit unit, which is either kilobytes, blocks (typically eight - kilobytes), milliseconds, seconds, or minutes. Default units can be - found by referencing <structname>pg_settings</>.<structfield>unit</>. - For convenience, - a different unit can also be specified explicitly. Valid memory units - are <literal>kB</literal> (kilobytes), <literal>MB</literal> - (megabytes), <literal>GB</literal> (gigabytes), and <literal>TB</literal> (terabytes); valid time units - are <literal>ms</literal> (milliseconds), <literal>s</literal> - (seconds), <literal>min</literal> (minutes), <literal>h</literal> - (hours), and <literal>d</literal> (days). Note that the multiplier - for memory units is 1024, not 1000. + <emphasis>Boolean</emphasis>: Values can be written as + <literal>on</literal>, + <literal>off</literal>, + <literal>true</literal>, + <literal>false</literal>, + <literal>yes</literal>, + <literal>no</literal>, + <literal>1</literal>, + <literal>0</literal> + (all case-insensitive) or any unambiguous prefix of these. </para> + </listitem> + <listitem> <para> - Parameters of type <quote>enum</> are specified in the same way as string - parameters, but are restricted to a limited set of values. The allowed - values can be found - from <structname>pg_settings</>.<structfield>enumvals</>. - Enum parameter values are case-insensitive. + <emphasis>String</emphasis>: + Enclose the value in single-quote. Values are case-insensitive. + If multiple values are allowed separate them with commas. </para> - </sect2> + </listitem> + + <listitem> + <para> + <emphasis>Numeric</emphasis> + (integer and floating point): Do not use single-quotes + (unless otherwise required) + or thousand separators. + Typically memory or time related - see comments in that + section for detail. + </para> + </listitem> - <sect2 id="config-setting-configuration-file"> - <title>Setting Parameters via the Configuration File</title> + <listitem> + <para> + <emphasis>Numeric or String with Unit</emphasis>: Memory & Time. + Both of these have an implicit unit, which is either kilobytes, + blocks (typically eight kilobytes), milliseconds, seconds, or minutes. + An numeric value will use the default, which can be + found by referencing <structname>pg_settings</>.<structfield>unit</>. + For convenience, a different unit can also be specified explicitly + via a string value. It is case-sensitive and + may include a space between the value and the unit + <itemizedlist> + <listitem> + <para> + Valid memory units are + <literal>kB</literal> (kilobytes), + <literal>MB</literal> (megabytes), + <literal>GB</literal> (gigabytes), + and <literal>TB</literal> (terabytes). + The multiplier for memory units is 1024, not 1000. + </para> + </listitem> + <listitem> + <para> + Valid time units are + <literal>ms</literal> (milliseconds), + <literal>s</literal> (seconds), + <literal>min</literal> (minutes), + <literal>h</literal> (hours), + and <literal>d</literal> (days). + </para> + </listitem> + </itemizedlist> + </para> + </listitem> + <listitem> <para> - One way to set these parameters is to edit the file - <filename>postgresql.conf</><indexterm><primary>postgresql.conf</></>, - which is normally kept in the data directory. (A default copy is - installed there when the database cluster directory is - initialized.) An example of what this file might look like is: + <emphasis><quote>enum</></emphasis>: These specified in the same way as string + parameters, but are restricted to a limited set of values that can be queried + from <structname>pg_settings</>.<structfield>enumvals</>: +<programlisting> +SELECT name, setting, enumvals FROM pg_settings WHERE enumvals IS NOT NULL; +</programlisting> + Enum parameter values are case-insensitive. + </para> + </listitem> + </itemizedlist> + </sect2> + + <sect2 id="config-setting-configuration-file"> + <title>Parameter Interaction via Configuration File</title> + + <para> + The primary way to set these parameters is to edit the file + <filename>postgresql.conf</><indexterm><primary>postgresql.conf</></>, + which is normally kept in the data directory. (A default copy is + installed there when the database cluster directory is + initialized.) An example of what this file might look like is: <programlisting> # This is a comment log_connections = yes @@ -71,129 +128,209 @@ log_destination = 'syslog' search_path = '"$user", public' shared_buffers = 128MB </programlisting> - One parameter is specified per line. The equal sign between name and - value is optional. Whitespace is insignificant and blank lines are - ignored. Hash marks (<literal>#</literal>) designate the remainder of the - line as a comment. Parameter values that are not simple identifiers or - numbers must be single-quoted. To embed a single quote in a parameter - value, write either two quotes (preferred) or backslash-quote. - </para> + One parameter is specified per line. The equal sign between name and + value is optional. Whitespace is insignificant and blank lines are + ignored. Hash marks (<literal>#</literal>) designate the remainder of the + line as a comment. Parameter values that are not simple identifiers or + numbers must be single-quoted. To embed a single quote in a parameter + value, write either two quotes (preferred) or backslash-quote. + </para> - <para> - <indexterm> - <primary>SIGHUP</primary> - </indexterm> - The configuration file is reread whenever the main server process - receives a <systemitem>SIGHUP</> signal; this is most easily done by - running <literal>pg_ctl reload</> from the command-line or by calling - the SQL function <function>pg_reload_conf()</function>. The main - server process - also propagates this signal to all currently running server - processes so that existing sessions also get the new - value. Alternatively, you can send the signal to a single server - process directly. Some parameters can only be set at server start; - any changes to their entries in the configuration file will be ignored - until the server is restarted. Invalid parameter settings in the - configuration file are likewise ignored (but logged) during - <systemitem>SIGHUP</> processing. - </para> - </sect2> + <para> + Parameters set in this way provide the global default value for the cluster. + The setting actually seen by the connecting user or issued statement + will be this value unless it is overridden. + The next sections describe ways in which the administrator + or user can override these defaults. + </para> - <sect2 id="config-setting-other-methods"> - <title>Other Ways to Set Parameters</title> + <para> + <indexterm> + <primary>SIGHUP</primary> + </indexterm> + The configuration file is reread whenever the main server process + receives a <systemitem>SIGHUP</> signal; this is most easily done by + running <literal>pg_ctl reload</> from the command-line or by calling + the SQL function <function>pg_reload_conf()</function>. The main + server process + also propagates this signal to all currently running server + processes so that existing sessions also get the new + value. Alternatively, you can send the signal to a single server + process directly. Some parameters can only be set at server start; + any changes to their entries in the configuration file will be ignored + until the server is restarted. Invalid parameter settings in the + configuration file are likewise ignored (but logged) during + <systemitem>SIGHUP</> processing. + </para> + </sect2> - <para> - A second way to set these configuration parameters is to give them - as a command-line option to the <command>postgres</command> command, - such as: -<programlisting> -postgres -c log_connections=yes -c log_destination='syslog' -</programlisting> - Command-line options override any conflicting settings in - <filename>postgresql.conf</filename>. Note that this means you won't - be able to change the value on-the-fly by editing - <filename>postgresql.conf</filename>, so while the command-line - method might be convenient, it can cost you flexibility later. - </para> + <sect2 id="config-setting-sql-command-interaction"> + <title>Parameter Interaction via SQL</title> + <para> + <productname>PostgreSQL</productname> provides three SQL commands + to establish configuration defaults + that override those configured globally. + The evaluation of these defaults occurs at the beginning of a + new session, upon the user issuing <xref linkend="SQL-DISCARD">, + or if the server forces the session to reload it configuration after a + <systemitem>SIGHUP</systemitem> + </para> + <itemizedlist> + <listitem> + <para> + The <xref linkend="SQL-ALTERSYSTEM"> command provides + an SQL-accessible means + to change the global defaults. Since the server must + be running to execute SQL + the timing of when the actual value takes effect depends + on the variable being + changed - but in no case is the current session affected + nor will any change take + effect before the next configuration + reload (<systemitem>SIGHUP</>) by the server. + </para> + </listitem> + <listitem> + <para> + The <xref linkend="sql-alterdatabase"> command allows the database + administrator to override global settings on a per-database basis. + </para> + </listitem> + <listitem> + <para> + The <xref linkend="sql-alterrole"> command allows the database administrator + to override both global and per-database settings with user-specific values. + </para> + </listitem> + </itemizedlist> - <para> - Occasionally it is useful to give a command line option to - one particular session only. The environment variable - <envar>PGOPTIONS</envar> can be used for this purpose on the - client side: + <para> + Once a client connects to the database PostgreSQL provides two + additional SQL commands + to interact with session-local system configuration. + Both of these commands have equivalent + system administration functions. + </para> + + <itemizedlist> + <listitem> + <para> + The <xref linkend="SQL-SHOW"> + command allows inspection of the current value of all parameters. + The corresponding function + is <function>current_setting(setting_name text)</function>. + </para> + </listitem> + <listitem> + <para> + The <xref linkend="SQL-SET"> + command allows modification of the current value some parameters. + The corresponding function is + <function>set_config(setting_name, new_value, is_local)</function>. + </para> + </listitem> + </itemizedlist> + + <para> + Both <emphasis>SELECT</> and <emphasis>UPDATE</> can be issued against the + virtual table <structname>pg_settings</> to view and + affect the session-local configuration. + Its definition can be found in <xref linkend="view-pg-settings">. + </para> + + <itemizedlist> + <listitem> + <para> + <xref linkend="SQL-SELECT">-ing against this relation + is the equivalent of issuing + SHOW but provides considerably more detail as well as + allowing for joining against other relations and specifying filter criteria. + </para> + </listitem> + <listitem> + <para> + <xref linkend="SQL-UPDATE">-ing against this relation, + specifically the <structname>setting</> column + is the equivalent of issuing SET though all values must be single-quoted. + </para> + <para> + Note that the eqivalent of <programlisting> -env PGOPTIONS='-c geqo=off' psql +SET configuration_parameter TO DEFAULT; +</> + would be: +<programlisting> +UPDATE pg_settings SET setting = reset_val WHERE name = 'configuration_parameter'; </programlisting> - (This works for any <application>libpq</>-based client application, not - just <application>psql</application>.) Note that this won't work for - parameters that are fixed when the server is started or that must be - specified in <filename>postgresql.conf</filename>. - </para> + </para> + </listitem> + </itemizedlist> - <para> - Furthermore, it is possible to assign a set of parameter settings to - a user or a database. Whenever a session is started, the default - settings for the user and database involved are loaded. The - commands <xref linkend="sql-alterrole"> - and <xref linkend="sql-alterdatabase">, - respectively, are used to configure these settings. Per-database - settings override anything received from the - <command>postgres</command> command-line or the configuration - file, and in turn are overridden by per-user settings; both are - overridden by per-session settings. - </para> + </sect2> - <para> - Some parameters can be changed in individual <acronym>SQL</acronym> - sessions with the <xref linkend="SQL-SET"> - command, for example: -<screen> -SET ENABLE_SEQSCAN TO OFF; -</screen> - If <command>SET</> is allowed, it overrides all other sources of - values for the parameter. Some parameters cannot be changed via - <command>SET</command>: for example, if they control behavior that - cannot be changed without restarting the entire - <productname>PostgreSQL</productname> server. Also, some parameters - require superuser permission to change via <command>SET</command> or - <command>ALTER</>. - </para> + <sect2> + <title>Parameter Interaction via Shell</title> + <para> + In addition to setting global defaults or attaching overrides + at the database or role scope + , you may choose to provide them to + <productname>PostgreSQL</productname> via shell facilities. + Both the server and <application>libpq</> client library + have defined ways to accept + parameter values via the shell. + </para> + <itemizedlist> - <para> - Another way to change configuration parameters persistently is by - use of <xref linkend="SQL-ALTERSYSTEM"> - command, for example: -<screen> -ALTER SYSTEM SET checkpoint_timeout TO 600; -</screen> - This command will allow users to change values persistently - through SQL command. The values will be effective after reload of server configuration - (<acronym>SIGHUP</>) or server startup. The effect of this command is similar to when - user manually changes values in <filename>postgresql.conf</filename>. - </para> - </sect2> + <listitem> + <para> + On the <emphasis>server</emphasis>, command-line options can passed to the + <command>postgres</command> command directly via the "-c" parameter. +<programlisting> +postgres -c log_connections=yes -c log_destination='syslog' +</programlisting> + Settings provided this way override those resolved globally + (via postgresql.conf or ALTER SYSTEM) + but are otherwise treated as being global for the purpose of + database and role overriding. + </para> - <sect2 id="config-setting-examining"> - <title>Examining Parameter Settings</title> + <para> + Typically, a production system will be adminstered via its + <filename>postgresql.conf</filename> file. + Use of this mechanism is suggested only for development and testing. + </para> + </listitem> - <para> - The <xref linkend="SQL-SHOW"> - command allows inspection of the current values of all parameters. - </para> + <listitem> + <para> + On the <emphasis>libpq-client</emphasis>, command-line options are + specified using the + <envar>PGOPTIONS</envar> environment variable. + Upon connecting to a server the contents of this variable are sent + to the server as if they were being + executed via a SQL <xref linkend="SQL-SET"> at the beginning of the session. + </para> - <para> - The virtual table <structname>pg_settings</structname> also allows - displaying and updating session run-time parameters; see <xref - linkend="view-pg-settings"> for details and a description of the - different variable types and when they can be changed. - <structname>pg_settings</structname> is equivalent to <command>SHOW</> - and <command>SET</>, but can be more convenient - to use because it can be joined with other tables, or selected from using - any desired selection condition. It also contains more information about - each parameter than is available from <command>SHOW</>. - </para> + <para> + However, the format for <envar>PGOPTIONS</envar> is similar to that provided when launching + <command>postgres</command> command. + Specifically, the '-c' flag specification is part of the value. +<programlisting> +env PGOPTIONS="-c geqo=off -c statement_timeout='5 min'" psql +</programlisting> + </para> - </sect2> + <para> + Other clients and libraries may provide their own mechanisms, + via the shell or otherwise, that allow the user + to setup the session configuration without requiring the user + to issue SQL commands. Please see their documentation + for details. + </para> + </listitem> + </itemizedlist> + + </sect2> <sect2 id="config-includes"> <title>Configuration File Includes</title>
-- Sent via pgsql-docs mailing list (pgsql-docs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-docs