--- /dev/null
+<!--
+$PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.13 2005/09/12 22:11:38 neilc Exp $
+-->
+<chapter Id="runtime-config">
+ <title>Run-time Configuration</title>
+
+ <indexterm>
+ <primary>configuration</primary>
+ <secondary>of the server</secondary>
+ </indexterm>
+
+ <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 chapters. The subsequent sections
+ discuss each parameter in detail.
+ </para>
+
+ <sect1 id="config-setting">
+ <title>Setting Parameters</title>
+
+ <para>
+ All parameter names are case-insensitive. Every parameter takes a
+ value of one of four types: boolean, integer, floating point,
+ or string. Boolean values may 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>
+
+ <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. (<command>initdb</>
+ installs a default copy there.) An example of what this file might look
+ like is:
+<programlisting>
+# This is a comment
+log_connections = yes
+log_destination = 'syslog'
+search_path = '$user, public'
+</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>) introduce comments
+ anywhere. Parameter values that are not simple identifiers or
+ numbers must be single-quoted.
+ </para>
+
+ <para>
+ <indexterm>
+ <primary>SIGHUP</primary>
+ </indexterm>
+ The configuration file is reread whenever the
+ <command>postmaster</command> process receives a
+ <systemitem>SIGHUP</> signal (which is most easily sent by means
+ of <literal>pg_ctl reload</>). The <command>postmaster</command>
+ 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.
+ </para>
+
+ <para>
+ A second way to set these configuration parameters is to give them
+ as a command line option to the <command>postmaster</command>, such as:
+<programlisting>
+postmaster -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 may be convenient, it can cost you flexibility later.
+ </para>
+
+ <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:
+<programlisting>
+env PGOPTIONS='-c geqo=off' psql
+</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>
+ Furthermore, it is possible to assign a set of option 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-alteruser" endterm="sql-alteruser-title">
+ and <xref linkend="sql-alterdatabase" endterm="sql-alterdatabase-title">,
+ respectively, are used to configure these settings. Per-database
+ settings override anything received from the
+ <command>postmaster</command> command-line or the configuration
+ file, and in turn are overridden by per-user settings; both are
+ overridden by per-session options.
+ </para>
+
+ <para>
+ Some parameters can be changed in individual <acronym>SQL</acronym>
+ sessions with the <xref linkend="SQL-SET" endterm="SQL-SET-title">
+ 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 reasonably be changed without restarting
+ <productname>PostgreSQL</productname>. Also, some parameters can
+ be modified via <command>SET</command> or <command>ALTER</> by superusers,
+ but not by ordinary users.
+ </para>
+
+ <para>
+ The <xref linkend="SQL-SHOW" endterm="SQL-SHOW-title">
+ command allows inspection of the current values of all parameters.
+ </para>
+
+ <para>
+ The virtual table <structname>pg_settings</structname>
+ (described in <xref linkend="view-pg-settings">) also allows
+ displaying and updating session run-time parameters. It 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.
+ </para>
+ </sect1>
+
+ <sect1 id="runtime-config-file-locations">
+ <title>File Locations</title>
+
+ <para>
+ In addition to the <filename>postgresql.conf</filename> file
+ already mentioned, <productname>PostgreSQL</productname> uses
+ two other manually-edited configuration files, which control
+ client authentication (their use is discussed in <xref
+ linkend="client-authentication">). By default, all three
+ configuration files are stored in the database cluster's data
+ directory. The options described in this section allow the
+ configuration files to be placed elsewhere. (Doing so can ease
+ administration. In particular it is often easier to ensure that
+ the configuration files are properly backed-up when they are
+ kept separate.)
+ </para>
+
+ <variablelist>
+ <varlistentry id="guc-data-directory" xreflabel="data_directory">
+ <term><varname>data_directory</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>data_directory</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specifies the directory to use for data storage.
+ This option can only be set at server start.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-config-file" xreflabel="config_file">
+ <term><varname>config_file</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>config_file</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specifies the main server configuration file
+ (customarily called <filename>postgresql.conf</>).
+ This option can only be set on the postmaster command line.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-hba-file" xreflabel="hba_file">
+ <term><varname>hba_file</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>hba_file</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specifies the configuration file for host-based authentication
+ (customarily called <filename>pg_hba.conf</>).
+ This option can only be set at server start.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-ident-file" xreflabel="ident_file">
+ <term><varname>ident_file</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>ident_file</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specifies the configuration file for
+ <application>ident</> authentication
+ (customarily called <filename>pg_ident.conf</>).
+ This option can only be set at server start.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-external-pid-file" xreflabel="external_pid_file">
+ <term><varname>external_pid_file</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>external_pid_file</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specifies the name of an additional process-id (PID) file that the
+ <application>postmaster</> should create for use by server
+ administration programs.
+ This option can only be set at server start.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>
+ In a default installation, none of the above options are set explicitly.
+ Instead, the
+ data directory is specified by the <option>-D</option> command-line
+ option or the <envar>PGDATA</envar> environment variable, and the
+ configuration files are all found within the data directory.
+ </para>
+
+ <para>
+ If you wish to keep the configuration files elsewhere than the
+ data directory, the postmaster's <option>-D</option>
+ command-line option or <envar>PGDATA</envar> environment variable
+ must point to the directory containing the configuration files,
+ and the <varname>data_directory</> option must be set in
+ <filename>postgresql.conf</filename> (or on the command line) to show
+ where the data directory is actually located. Notice that
+ <varname>data_directory</> overrides <option>-D</option> and
+ <envar>PGDATA</envar> for the location
+ of the data directory, but not for the location of the configuration
+ files.
+ </para>
+
+ <para>
+ If you wish, you can specify the configuration file names and locations
+ individually using the options <varname>config_file</>,
+ <varname>hba_file</> and/or <varname>ident_file</>.
+ <varname>config_file</> can only be specified on the
+ <command>postmaster</command> command line, but the others can be
+ set within the main configuration file. If all three options plus
+ <varname>data_directory</> are explicitly set, then it is not necessary
+ to specify <option>-D</option> or <envar>PGDATA</envar>.
+ </para>
+
+ <para>
+ When setting any of these options, a relative path will be interpreted
+ with respect to the directory in which the <command>postmaster</command>
+ is started.
+ </para>
+ </sect1>
+
+ <sect1 id="runtime-config-connection">
+ <title>Connections and Authentication</title>
+
+ <sect2 id="runtime-config-connection-settings">
+ <title>Connection Settings</title>
+
+ <variablelist>
+
+ <varlistentry id="guc-listen-addresses" xreflabel="listen_addresses">
+ <term><varname>listen_addresses</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>listen_addresses</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specifies the TCP/IP address(es) on which the server is
+ to listen for connections from client applications.
+ The value takes the form of a comma-separated list of host names
+ and/or numeric IP addresses. The special entry <literal>*</>
+ corresponds to all available IP interfaces.
+ If the list is empty, the server does not listen on any IP interface
+ at all, in which case only Unix-domain sockets can be used to connect
+ to it.
+ The default value is <systemitem class="systemname">localhost</>,
+ which allows only local <quote>loopback</> connections to be made.
+ This parameter can only be set at server start.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-port" xreflabel="port">
+ <term><varname>port</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>port</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ The TCP port the server listens on; 5432 by default. Note that the
+ same port number is used for all IP addresses the server listens on.
+ This parameter can only be set at server start.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-max-connections" xreflabel="max_connections">
+ <term><varname>max_connections</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>max_connections</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Determines the maximum number of concurrent connections to the
+ database server. The default is typically 100, but may be less
+ if your kernel settings will not support it (as determined
+ during <application>initdb</>). This parameter can only be
+ set at server start.
+ </para>
+
+ <para>
+ Increasing this parameter may cause <productname>PostgreSQL</>
+ to request more <systemitem class="osname">System V</> shared
+ memory or semaphores than your operating system's default configuration
+ allows. See <xref linkend="sysvipc"> for information on how to
+ adjust those parameters, if necessary.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-superuser-reserved-connections"
+ xreflabel="superuser_reserved_connections">
+ <term><varname>superuser_reserved_connections</varname>
+ (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>superuser_reserved_connections</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Determines the number of connection <quote>slots</quote> that
+ are reserved for connections by <productname>PostgreSQL</>
+ superusers. At most <xref linkend="guc-max-connections">
+ connections can ever be active simultaneously. Whenever the
+ number of active concurrent connections is at least
+ <varname>max_connections</> minus
+ <varname>superuser_reserved_connections</varname>, new
+ connections will be accepted only for superusers.
+ </para>
+
+ <para>
+ The default value is 2. The value must be less than the value of
+ <varname>max_connections</varname>. This parameter can only be
+ set at server start.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-unix-socket-directory" xreflabel="unix_socket_directory">
+ <term><varname>unix_socket_directory</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>unix_socket_directory</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specifies the directory of the Unix-domain socket on which the
+ server is to listen for
+ connections from client applications. The default is normally
+ <filename>/tmp</filename>, but can be changed at build time.
+ This parameter can only be set at server start.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-unix-socket-group" xreflabel="unix_socket_group">
+ <term><varname>unix_socket_group</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>unix_socket_group</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Sets the owning group of the Unix-domain socket. (The owning
+ user of the socket is always the user that starts the
+ server.) In combination with the option
+ <varname>unix_socket_permissions</varname> this can be used as
+ an additional access control mechanism for Unix-domain connections.
+ By default this is the empty string, which uses the default
+ group for the current user. This option can only be set at
+ server start.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-unix-socket-permissions" xreflabel="unix_socket_permissions">
+ <term><varname>unix_socket_permissions</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>unix_socket_permissions</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Sets the access permissions of the Unix-domain socket. Unix-domain
+ sockets use the usual Unix file system permission set.
+ The option value is expected to be a numeric mode
+ specification in the form accepted by the
+ <function>chmod</function> and <function>umask</function>
+ system calls. (To use the customary octal format the number
+ must start with a <literal>0</literal> (zero).)
+ </para>
+
+ <para>
+ The default permissions are <literal>0777</literal>, meaning
+ anyone can connect. Reasonable alternatives are
+ <literal>0770</literal> (only user and group, see also
+ <varname>unix_socket_group</varname>) and <literal>0700</literal>
+ (only user). (Note that for a Unix-domain socket, only write
+ permission matters and so there is no point in setting or revoking
+ read or execute permissions.)
+ </para>
+
+ <para>
+ This access control mechanism is independent of the one
+ described in <xref linkend="client-authentication">.
+ </para>
+
+ <para>
+ This option can only be set at server start.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-bonjour-name" xreflabel="bonjour_name">
+ <term><varname>bonjour_name</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>bonjour_name</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specifies the <productname>Bonjour</productname> broadcast
+ name. By default, the computer name is used, specified as an
+ empty string ''. This option is ignored if the server was not
+ compiled with <productname>Bonjour</productname> support. This
+ option can only be set at server start.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-tcp-keepalives-idle" xreflabel="tcp_keepalives_idle">
+ <term><varname>tcp_keepalives_idle</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>tcp_keepalives_idle</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ On systems that support the TCP_KEEPIDLE socket option, specifies the
+ number of seconds between sending keepalives on an otherwise idle
+ connection. A value of 0 uses the system default. If TCP_KEEPIDLE is
+ not supported, this parameter must be 0. This option is ignored for
+ connections made via a Unix-domain socket.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-tcp-keepalives-interval" xreflabel="tcp_keepalives_interval">
+ <term><varname>tcp_keepalives_interval</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>tcp_keepalives_interval</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ On systems that support the TCP_KEEPINTVL socket option, specifies how
+ long, in seconds, to wait for a response to a keepalive before
+ retransmitting. A value of 0 uses the system default. If TCP_KEEPINTVL
+ is not supported, this parameter must be 0. This option is ignored
+ for connections made via a Unix-domain socket.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-tcp-keepalives-count" xreflabel="tcp_keepalives_count">
+ <term><varname>tcp_keepalives_count</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>tcp_keepalives_count</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ On systems that support the TCP_KEEPCNT socket option, specifies how
+ many keepalives may be lost before the connection is considered dead.
+ A value of 0 uses the system default. If TCP_KEEPINTVL is not
+ supported, this parameter must be 0.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect2>
+ <sect2 id="runtime-config-connection-security">
+ <title>Security and Authentication</title>
+
+ <variablelist>
+ <varlistentry id="guc-authentication-timeout" xreflabel="authentication_timeout">
+ <term><varname>authentication_timeout</varname> (<type>integer</type>)</term>
+ <indexterm><primary>timeout</><secondary>client authentication</></indexterm>
+ <indexterm><primary>client authentication</><secondary>timeout during</></indexterm>
+ <indexterm>
+ <primary><varname>authentication_timeout</> configuration parameter</primary>
+ </indexterm>
+
+ <listitem>
+ <para>
+ Maximum time to complete client authentication, in seconds. If a
+ would-be client has not completed the authentication protocol in
+ this much time, the server breaks the connection. This prevents
+ hung clients from occupying a connection indefinitely. This
+ option can only be set at server start or in the
+ <filename>postgresql.conf</filename> file. The default is 60.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-ssl" xreflabel="ssl">
+ <term><varname>ssl</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>ssl</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Enables <acronym>SSL</> connections. Please read
+ <xref linkend="ssl-tcp"> before using this. The default
+ is <literal>off</>. This parameter can only be set at server
+ start.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-password-encryption" xreflabel="password_encryption">
+ <term><varname>password_encryption</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>password_encryption</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ When a password is specified in <xref
+ linkend="sql-createuser" endterm="sql-createuser-title"> or
+ <xref linkend="sql-alteruser" endterm="sql-alteruser-title">
+ without writing either <literal>ENCRYPTED</> or
+ <literal>UNENCRYPTED</>, this option determines whether the
+ password is to be encrypted. The default is <literal>on</>
+ (encrypt the password).
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-krb-server-keyfile" xreflabel="krb_server_keyfile">
+ <term><varname>krb_server_keyfile</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>krb_server_keyfile</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Sets the location of the Kerberos server key file. See
+ <xref linkend="kerberos-auth"> for details. This parameter
+ can only be set at server start.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-krb-srvname" xreflabel="krb_srvname">
+ <term><varname>krb_srvname</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>krb_srvname</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Sets the Kerberos service name. See <xref linkend="kerberos-auth">
+ for details. This parameter can only be set at server start.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-krb-server-hostname" xreflabel="krb_server_hostname">
+ <term><varname>krb_server_hostname</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>krb_server_hostname</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Sets the hostname part of the service principal.
+ This, combined with <varname>krb_srvname</>, is used to generate
+ the complete service principal, i.e.
+ <varname>krb_server_hostname</><literal>/</><varname>krb_server_hostname</><literal>@</>REALM.
+ </para>
+ <para>
+ If not set, the default is to allow any service principal matching an entry
+ in the keytab. See <xref linkend="kerberos-auth"> for details.
+ This parameter can only be set at server start.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-krb-caseins-users" xreflabel="krb_caseins_users">
+ <term><varname>krb_caseins_users</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>krb_caseins_users</varname> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Sets if Kerberos usernames should be treated case-insensitively.
+ The default is <literal>off</> (case sensitive). This parameter
+ can only be set at server start.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-db-user-namespace" xreflabel="db_user_namespace">
+ <term><varname>db_user_namespace</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>db_user_namespace</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ This enables per-database user names. It is off by default.
+ </para>
+
+ <para>
+ If this is on, you should create users as <literal>username@dbname</>.
+ When <literal>username</> is passed by a connecting client,
+ <literal>@</> and the database name are appended to the user
+ name and that database-specific user name is looked up by the
+ server. Note that when you create users with names containing
+ <literal>@</> within the SQL environment, you will need to
+ quote the user name.
+ </para>
+
+ <para>
+ With this option enabled, you can still create ordinary global
+ users. Simply append <literal>@</> when specifying the user
+ name in the client. The <literal>@</> will be stripped off
+ before the user name is looked up by the server.
+ </para>
+
+ <note>
+ <para>
+ This feature is intended as a temporary measure until a
+ complete solution is found. At that time, this option will
+ be removed.
+ </para>
+ </note>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect2>
+ </sect1>
+
+ <sect1 id="runtime-config-resource">
+ <title>Resource Consumption</title>
+
+ <sect2 id="runtime-config-resource-memory">
+ <title>Memory</title>
+
+ <variablelist>
+ <varlistentry id="guc-shared-buffers" xreflabel="shared_buffers">
+ <term><varname>shared_buffers</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>shared_buffers</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Sets the number of shared memory buffers used by the database
+ server. The default is typically 1000, but may be less if your
+ kernel settings will not support it (as determined during
+ <application>initdb</>). Each buffer is 8192 bytes, unless a
+ different value of <symbol>BLCKSZ</symbol> was chosen when building
+ the server. This setting must be at least 16, as well as at
+ least twice the value of <xref linkend="guc-max-connections">;
+ however, settings significantly higher than the minimum are
+ usually needed for good performance. Values of a few thousand
+ are recommended for production installations. This option can
+ only be set at server start.
+ </para>
+
+ <para>
+ Increasing this parameter may cause <productname>PostgreSQL</>
+ to request more <systemitem class="osname">System V</> shared
+ memory than your operating system's default configuration
+ allows. See <xref linkend="sysvipc"> for information on how to
+ adjust those parameters, if necessary.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-temp-buffers" xreflabel="temp_buffers">
+ <term><varname>temp_buffers</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>temp_buffers</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Sets the maximum number of temporary buffers used by each database
+ session. These are session-local buffers used only for access
+ to temporary tables. The default is 1000. The setting can
+ be changed within individual sessions, but only up until the
+ first use of temporary tables within a session; subsequent
+ attempts to change the value will have no effect on that session.
+ </para>
+
+ <para>
+ A session will allocate temporary buffers as needed up to the limit
+ given by <varname>temp_buffers</>. The cost of setting a large
+ value in sessions that do not actually need a lot of temporary
+ buffers is only a buffer descriptor, or about 64 bytes, per
+ increment in <varname>temp_buffers</>. However if a buffer is
+ actually used an additional 8192 bytes will be consumed for it
+ (or in general, <symbol>BLCKSZ</symbol> bytes).
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-max-prepared-transactions" xreflabel="max_prepared_transactions">
+ <term><varname>max_prepared_transactions</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>max_prepared_transactions</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Sets the maximum number of transactions that can be in the
+ <quote>prepared</> state simultaneously (see <xref
+ linkend="sql-prepare-transaction"
+ endterm="sql-prepare-transaction-title">).
+ Setting this parameter to zero disables the prepared-transaction
+ feature.
+ The default is 5.
+ This option can only be set at server start.
+ </para>
+
+ <para>
+ If you are not using prepared transactions, this parameter may as
+ well be set to zero. If you are using them, you will probably
+ want <varname>max_prepared_transactions</varname> to be at least
+ as large as <xref linkend="guc-max-connections">, to avoid unwanted
+ failures at the prepare step.
+ </para>
+
+ <para>
+ Increasing this parameter may cause <productname>PostgreSQL</>
+ to request more <systemitem class="osname">System V</> shared
+ memory than your operating system's default configuration
+ allows. See <xref linkend="sysvipc"> for information on how to
+ adjust those parameters, if necessary.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-work-mem" xreflabel="work_mem">
+ <term><varname>work_mem</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>work_mem</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specifies the amount of memory to be used by internal sort operations
+ and hash tables before switching to temporary disk files. The value is
+ specified in kilobytes, and defaults to 1024 kilobytes (1 MB).
+ Note that for a complex query, several sort or hash operations might be
+ running in parallel; each one will be allowed to use as much memory
+ as this value specifies before it starts to put data into temporary
+ files. Also, several running sessions could be doing such operations
+ concurrently. So the total memory used could be many
+ times the value of <varname>work_mem</varname>; it is necessary to
+ keep this fact in mind when choosing the value. Sort operations are
+ used for <literal>ORDER BY</>, <literal>DISTINCT</>, and
+ merge joins.
+ Hash tables are used in hash joins, hash-based aggregation, and
+ hash-based processing of <literal>IN</> subqueries.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-maintenance-work-mem" xreflabel="maintenance_work_mem">
+ <term><varname>maintenance_work_mem</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>maintenance_work_mem</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specifies the maximum amount of memory to be used in maintenance
+ operations, such as <command>VACUUM</command>, <command>CREATE
+ INDEX</>, and <command>ALTER TABLE ADD FOREIGN KEY</>.
+ The value is specified in kilobytes, and defaults to 16384 kilobytes
+ (16 MB). Since only one of these operations can be executed at
+ a time by a database session, and an installation normally doesn't
+ have very many of them happening concurrently, it's safe to set this
+ value significantly larger than <varname>work_mem</varname>. Larger
+ settings may improve performance for vacuuming and for restoring
+ database dumps.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-max-stack-depth" xreflabel="max_stack_depth">
+ <term><varname>max_stack_depth</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>max_stack_depth</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specifies the maximum safe depth of the server's execution stack.
+ The ideal setting for this parameter is the actual stack size limit
+ enforced by the kernel (as set by <literal>ulimit -s</> or local
+ equivalent), less a safety margin of a megabyte or so. The safety
+ margin is needed because the stack depth is not checked in every
+ routine in the server, but only in key potentially-recursive routines
+ such as expression evaluation. Setting the parameter higher than
+ the actual kernel limit will mean that a runaway recursive function
+ can crash an individual backend process. The default setting is
+ 2048 KB (two megabytes), which is conservatively small and unlikely
+ to risk crashes. However, it may be too small to allow execution
+ of complex functions.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect2>
+ <sect2 id="runtime-config-resource-fsm">
+ <title>Free Space Map</title>
+
+ <indexterm>
+ <primary>free space map</primary>
+ </indexterm>
+
+ <para>
+ These parameters control the size of the shared <firstterm>free space
+ map</>, which tracks the locations of unused space in the database.
+ An undersized free space map may cause the database to consume
+ increasing amounts of disk space over time, because free space that
+ is not in the map cannot be re-used; instead <productname>PostgreSQL</>
+ will request more disk space from the operating system when it needs
+ to store new data.
+ The last few lines displayed by a database-wide <command>VACUUM VERBOSE</>
+ command can help in determining if the current settings are adequate.
+ A <literal>NOTICE</> message is also printed during such an operation
+ if the current settings are too low.
+ </para>
+
+ <para>
+ Increasing these parameters may cause <productname>PostgreSQL</>
+ to request more <systemitem class="osname">System V</> shared
+ memory than your operating system's default configuration
+ allows. See <xref linkend="sysvipc"> for information on how to
+ adjust those parameters, if necessary.
+ </para>
+
+ <variablelist>
+ <varlistentry id="guc-max-fsm-pages" xreflabel="max_fsm_pages">
+ <term><varname>max_fsm_pages</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>max_fsm_pages</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Sets the maximum number of disk pages for which free space will
+ be tracked in the shared free-space map. Six bytes of shared memory
+ are consumed for each page slot. This setting must be more than
+ 16 * <varname>max_fsm_relations</varname>. The default is 20000.
+ This option can only be set at server start.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-max-fsm-relations" xreflabel="max_fsm_relations">
+ <term><varname>max_fsm_relations</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>max_fsm_relations</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Sets the maximum number of relations (tables and indexes) for which
+ free space will be tracked in the shared free-space map. Roughly
+ seventy bytes of shared memory are consumed for each slot.
+ The default is 1000.
+ This option can only be set at server start.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect2>
+ <sect2 id="runtime-config-resource-kernel">
+ <title>Kernel Resource Usage</title>
+ <variablelist>
+
+ <varlistentry id="guc-max-files-per-process" xreflabel="max_files_per_process">
+ <term><varname>max_files_per_process</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>max_files_per_process</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Sets the maximum number of simultaneously open files allowed to each
+ server subprocess. The default is 1000. If the kernel is enforcing
+ a safe per-process limit, you don't need to worry about this setting.
+ But on some platforms (notably, most BSD systems), the kernel will
+ allow individual processes to open many more files than the system
+ can really support when a large number of processes all try to open
+ that many files. If you find yourself seeing <quote>Too many open
+ files</> failures, try reducing this setting.
+ This option can only be set at server start.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-preload-libraries" xreflabel="preload_libraries">
+ <term><varname>preload_libraries</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>preload_libraries</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ This variable specifies one or more shared libraries that are
+ to be preloaded at server start. A parameterless
+ initialization function can optionally be called for each
+ library. To specify that, add a colon and the name of the
+ initialization function after the library name. For example
+ <literal>'$libdir/mylib:mylib_init'</literal> would cause
+ <literal>mylib</> to be preloaded and <literal>mylib_init</>
+ to be executed. If more than one library is to be loaded,
+ separate their names with commas.
+ </para>
+
+ <para>
+ If a specified library or initialization function is not found,
+ the server will fail to start.
+ </para>
+
+ <para>
+ <productname>PostgreSQL</productname> procedural language
+ libraries may be preloaded in this way, typically by using the
+ syntax <literal>'$libdir/plXXX:plXXX_init'</literal> where
+ <literal>XXX</literal> is <literal>pgsql</>, <literal>perl</>,
+ <literal>tcl</>, or <literal>python</>.
+ </para>
+
+ <para>
+ By preloading a shared library (and initializing it if
+ applicable), the library startup time is avoided when the
+ library is first used. However, the time to start each new
+ server process may increase slightly, even if that process never
+ uses the library. So this option is recommended only for
+ libraries that will be used in most sessions.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect2>
+
+ <sect2 id="runtime-config-resource-vacuum-cost">
+ <title id="runtime-config-resource-vacuum-cost-title">
+ Cost-Based Vacuum Delay
+ </title>
+
+ <para>
+ During the execution of <xref linkend="sql-vacuum"
+ endterm="sql-vacuum-title"> and <xref linkend="sql-analyze"
+ endterm="sql-analyze-title"> commands, the system maintains an
+ internal counter that keeps track of the estimated cost of the
+ various I/O operations that are performed. When the accumulated
+ cost reaches a limit (specified by
+ <varname>vacuum_cost_limit</varname>), the process performing
+ the operation will sleep for a while (specified by
+ <varname>vacuum_cost_delay</varname>). Then it will reset the
+ counter and continue execution.
+ </para>
+
+ <para>
+ The intent of this feature is to allow administrators to reduce
+ the I/O impact of these commands on concurrent database
+ activity. There are many situations in which it is not very
+ important that maintenance commands like
+ <command>VACUUM</command> and <command>ANALYZE</command> finish
+ quickly; however, it is usually very important that these
+ commands do not significantly interfere with the ability of the
+ system to perform other database operations. Cost-based vacuum
+ delay provides a way for administrators to achieve this.
+ </para>
+
+ <para>
+ This feature is disabled by default. To enable it, set the
+ <varname>vacuum_cost_delay</varname> variable to a nonzero
+ value.
+ </para>
+
+ <variablelist>
+ <varlistentry id="guc-vacuum-cost-delay" xreflabel="vacuum_cost_delay">
+ <term><varname>vacuum_cost_delay</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>vacuum_cost_delay</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ The length of time, in milliseconds, that the process will sleep
+ when the cost limit has been exceeded.
+ The default value is 0, which disables the cost-based vacuum
+ delay feature. Positive values enable cost-based vacuuming.
+ Note that on many systems, the effective resolution
+ of sleep delays is 10 milliseconds; setting
+ <varname>vacuum_cost_delay</varname> to a value that is
+ not a multiple of 10 may have the same results as setting it
+ to the next higher multiple of 10.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-vacuum-cost-page-hit" xreflabel="vacuum_cost_page_hit">
+ <term><varname>vacuum_cost_page_hit</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>vacuum_cost_page_hit</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ The estimated cost for vacuuming a buffer found in the shared buffer
+ cache. It represents the cost to lock the buffer pool, lookup
+ the shared hash table and scan the content of the page. The
+ default value is 1.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-vacuum-cost-page-miss" xreflabel="vacuum_cost_page_miss">
+ <term><varname>vacuum_cost_page_miss</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>vacuum_cost_page_miss</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ The estimated cost for vacuuming a buffer that has to be read from
+ disk. This represents the effort to lock the buffer pool,
+ lookup the shared hash table, read the desired block in from
+ the disk and scan its content. The default value is 10.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-vacuum-cost-page-dirty" xreflabel="vacuum_cost_page_dirty">
+ <term><varname>vacuum_cost_page_dirty</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>vacuum_cost_page_dirty</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ The estimated cost charged when vacuum modifies a block that was
+ previously clean. It represents the extra I/O required to
+ flush the dirty block out to disk again. The default value is
+ 20.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-vacuum-cost-limit" xreflabel="vacuum_cost_limit">
+ <term><varname>vacuum_cost_limit</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>vacuum_cost_limit</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ The accumulated cost that will cause the vacuuming process to sleep.
+ The default value is 200.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <note>
+ <para>
+ There are certain operations that hold critical locks and should
+ therefore complete as quickly as possible. Cost-based vacuum
+ delays do not occur during such operations. Therefore it is
+ possible that the cost accumulates far higher than the specified
+ limit. To avoid uselessly long delays in such cases, the actual
+ delay is calculated as <varname>vacuum_cost_delay</varname> *
+ <varname>accumulated_balance</varname> /
+ <varname>vacuum_cost_limit</varname> with a maximum of
+ <varname>vacuum_cost_delay</varname> * 4.
+ </para>
+ </note>
+ </sect2>
+
+ <sect2 id="runtime-config-resource-background-writer">
+ <title>Background Writer</title>
+
+ <para>
+ Beginning in <productname>PostgreSQL</> 8.0, there is a separate server
+ process called the <firstterm>background writer</>, whose sole function
+ is to issue writes of <quote>dirty</> shared buffers. The intent is
+ that server processes handling user queries should seldom or never have
+ to wait for a write to occur, because the background writer will do it.
+ This arrangement also reduces the performance penalty associated with
+ checkpoints. The background writer will continuously trickle out dirty
+ pages to disk, so that only a few pages will need to be forced out when
+ checkpoint time arrives, instead of the storm of dirty-buffer writes that
+ formerly occurred at each checkpoint. However there is a net overall
+ increase in I/O load, because where a repeatedly-dirtied page might
+ before have been written only once per checkpoint interval, the
+ background writer might write it several times in the same interval.
+ In most situations a continuous low load is preferable to periodic
+ spikes, but the parameters discussed in this subsection can be used to tune
+ the behavior for local needs.
+ </para>
+
+ <variablelist>
+ <varlistentry id="guc-bgwriter-delay" xreflabel="bgwriter_delay">
+ <term><varname>bgwriter_delay</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>bgwriter_delay</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specifies the delay between activity rounds for the
+ background writer. In each round the writer issues writes
+ for some number of dirty buffers (controllable by the
+ following parameters). It then sleeps for <varname>bgwriter_delay</>
+ milliseconds, and repeats. The default value is 200. Note
+ that on many systems, the effective resolution of sleep
+ delays is 10 milliseconds; setting <varname>bgwriter_delay</>
+ to a value that is not a multiple of 10 may have the same
+ results as setting it to the next higher multiple of 10.
+ This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-bgwriter-lru-percent" xreflabel="bgwriter_lru_percent">
+ <term><varname>bgwriter_lru_percent</varname> (<type>floating point</type>)</term>
+ <indexterm>
+ <primary><varname>bgwriter_lru_percent</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ To reduce the probability that server processes will need to issue
+ their own writes, the background writer tries to write buffers that
+ are likely to be recycled soon. In each round, it examines up to
+ <varname>bgwriter_lru_percent</> of the buffers that are nearest to
+ being recycled, and writes any that are dirty.
+ The default value is 1.0 (this is a percentage of the total number
+ of shared buffers).
+ This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-bgwriter-lru-maxpages" xreflabel="bgwriter_lru_maxpages">
+ <term><varname>bgwriter_lru_maxpages</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>bgwriter_lru_maxpages</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ In each round, no more than this many buffers will be written
+ as a result of scanning soon-to-be-recycled buffers.
+ The default value is 5.
+ This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-bgwriter-all-percent" xreflabel="bgwriter_all_percent">
+ <term><varname>bgwriter_all_percent</varname> (<type>floating point</type>)</term>
+ <indexterm>
+ <primary><varname>bgwriter_all_percent</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ To reduce the amount of work that will be needed at checkpoint time,
+ the background writer also does a circular scan through the entire
+ buffer pool, writing buffers that are found to be dirty.
+ In each round, it examines up to
+ <varname>bgwriter_all_percent</> of the buffers for this purpose.
+ The default value is 0.333 (this is a percentage of the total number
+ of shared buffers). With the default <varname>bgwriter_delay</>
+ setting, this will allow the entire shared buffer pool to be scanned
+ about once per minute.
+ This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-bgwriter-all-maxpages" xreflabel="bgwriter_all_maxpages">
+ <term><varname>bgwriter_all_maxpages</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>bgwriter_all_maxpages</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ In each round, no more than this many buffers will be written
+ as a result of the scan of the entire buffer pool. (If this
+ limit is reached, the scan stops, and resumes at the next buffer
+ during the next round.)
+ The default value is 5.
+ This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> file.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>
+ Smaller values of <varname>bgwriter_all_percent</varname> and
+ <varname>bgwriter_all_maxpages</varname> reduce the extra I/O load
+ caused by the background writer, but leave more work to be done
+ at checkpoint time. To reduce load spikes at checkpoints,
+ increase these two values.
+ Similarly, smaller values of <varname>bgwriter_lru_percent</varname> and
+ <varname>bgwriter_lru_maxpages</varname> reduce the extra I/O load
+ caused by the background writer, but make it more likely that server
+ processes will have to issue writes for themselves, delaying interactive
+ queries.
+ To disable background writing entirely,
+ set both <varname>maxpages</varname> values and/or both
+ <varname>percent</varname> values to zero.
+ </para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="runtime-config-wal">
+ <title>Write Ahead Log</title>
+
+ <para>
+ See also <xref linkend="wal-configuration"> for details on WAL
+ tuning.
+ </para>
+
+ <sect2 id="runtime-config-wal-settings">
+ <title>Settings</title>
+ <variablelist>
+
+ <varlistentry id="guc-fsync" xreflabel="fsync">
+ <indexterm>
+ <primary><varname>fsync</> configuration parameter</primary>
+ </indexterm>
+ <term><varname>fsync</varname> (<type>boolean</type>)</term>
+ <listitem>
+ <para>
+ If this option is on, the <productname>PostgreSQL</> server
+ will use the <function>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.
+ </para>
+
+ <para>
+ However, using <function>fsync()</function> results in a
+ performance penalty: when a transaction is committed,
+ <productname>PostgreSQL</productname> must wait for the
+ operating system to flush the write-ahead log to disk. When
+ <varname>fsync</varname> is disabled, the operating system is
+ allowed to do its best in buffering, ordering, and delaying
+ writes. This can result in significantly improved performance.
+ However, if the system crashes, the results of the last few
+ committed transactions may be lost in part or whole. In the
+ worst case, unrecoverable data corruption may occur.
+ (Crashes of the database server itself are <emphasis>not</>
+ a risk factor here. Only an operating-system-level crash
+ creates a risk of corruption.)
+ </para>
+
+ <para>
+ Due to the risks involved, there is no universally correct
+ setting for <varname>fsync</varname>. Some administrators
+ always disable <varname>fsync</varname>, while others only
+ turn it off for bulk loads, where there is a clear restart
+ point if something goes wrong, whereas some administrators
+ always leave <varname>fsync</varname> enabled. The default is
+ to enable <varname>fsync</varname>, for maximum reliability.
+ If you trust your operating system, your hardware, and your
+ utility company (or your battery backup), you can consider
+ disabling <varname>fsync</varname>.
+ </para>
+
+ <para>
+ This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> file. If this option
+ is <literal>off</>, consider also turning off
+ <varname>guc-full-page-writes</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-wal-sync-method" xreflabel="wal_sync_method">
+ <term><varname>wal_sync_method</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>wal_sync_method</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Method used for forcing WAL updates out to disk. Possible
+ values are:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <literal>open_datasync</> (write WAL files with <function>open()</> option <symbol>O_DSYNC</>)
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>fdatasync</> (call <function>fdatasync()</> at each commit),
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>fsync</> (call <function>fsync()</> at each commit)
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>fsync_writethrough</> (force write-through of any disk write cache)
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>open_sync</> (write WAL files with <function>open()</> option <symbol>O_SYNC</>)
+ </para>
+ </listitem>
+ </itemizedlist>
+ <para>
+ Not all of these choices are available on all platforms.
+ The top-most supported option is used as the default.
+ If <varname>fsync</varname> is off then this setting is irrelevant.
+ This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-full-page-writes" xreflabel="full_page_writes">
+ <indexterm>
+ <primary><varname>full_page_writes</> configuration parameter</primary>
+ </indexterm>
+ <term><varname>full_page_writes</varname> (<type>boolean</type>)</term>
+ <listitem>
+ <para>
+ A page write in process during an operating system crash might
+ be only partially written to disk, leading to an on-disk page
+ that contains a mix of old and new data. During recovery, the
+ row changes stored in WAL are not enough to completely restore
+ the page.
+ </para>
+
+ <para>
+ When this option is on, the <productname>PostgreSQL</> server
+ writes full pages to WAL when they are first modified after a
+ checkpoint so full recovery is possible. Turning this option off
+ might lead to a corrupt system after an operating system crash
+ or power failure because uncorrected partial pages might contain
+ inconsistent or corrupt data. The risks are less but similar to
+ <varname>fsync</>.
+ </para>
+
+ <para>
+ This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> file. The default is
+ <literal>on</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-wal-buffers" xreflabel="wal_buffers">
+ <term><varname>wal_buffers</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>wal_buffers</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Number of disk-page buffers allocated in shared memory for WAL data.
+ The default is 8. The setting need only be large enough to hold
+ the amount of WAL data generated by one typical transaction, since
+ the data is flushed to disk at every transaction commit.
+ This option can only be set at server start.
+ </para>
+
+ <para>
+ Increasing this parameter may cause <productname>PostgreSQL</>
+ to request more <systemitem class="osname">System V</> shared
+ memory than your operating system's default configuration
+ allows. See <xref linkend="sysvipc"> for information on how to
+ adjust those parameters, if necessary.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-commit-delay" xreflabel="commit_delay">
+ <term><varname>commit_delay</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>commit_delay</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Time delay between writing a commit record to the WAL buffer
+ and flushing the buffer out to disk, in microseconds. A
+ nonzero delay can allow multiple transactions to be committed
+ with only one <function>fsync()</function> system call, if
+ system load is high enough that additional transactions become
+ ready to commit within the given interval. But the delay is
+ just wasted if no other transactions become ready to
+ commit. Therefore, the delay is only performed if at least
+ <varname>commit_siblings</varname> other transactions are
+ active at the instant that a server process has written its
+ commit record. The default is zero (no delay).
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-commit-siblings" xreflabel="commit_siblings">
+ <term><varname>commit_siblings</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>commit_siblings</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Minimum number of concurrent open transactions to require
+ before performing the <varname>commit_delay</> delay. A larger
+ value makes it more probable that at least one other
+ transaction will become ready to commit during the delay
+ interval. The default is five.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect2>
+ <sect2 id="runtime-config-wal-checkpoints">
+ <title>Checkpoints</title>
+
+ <variablelist>
+ <varlistentry id="guc-checkpoint-segments" xreflabel="checkpoint_segments">
+ <term><varname>checkpoint_segments</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>checkpoint_segments</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Maximum distance between automatic WAL checkpoints, in log
+ file segments (each segment is normally 16 megabytes). The
+ default is three. This option can only be set at server start
+ or in the <filename>postgresql.conf</filename> file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-checkpoint-timeout" xreflabel="checkpoint_timeout">
+ <term><varname>checkpoint_timeout</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>checkpoint_timeout</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Maximum time between automatic WAL checkpoints, in
+ seconds. The default is 300 seconds. This option can only be
+ set at server start or in the <filename>postgresql.conf</>
+ file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-checkpoint-warning" xreflabel="checkpoint_warning">
+ <term><varname>checkpoint_warning</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>checkpoint_warning</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Write a message to the server log if checkpoints caused by
+ the filling of checkpoint segment files happen closer together
+ than this many seconds. The default is 30 seconds.
+ Zero turns off the warning.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect2>
+ <sect2 id="runtime-config-wal-archiving">
+ <title>Archiving</title>
+
+ <variablelist>
+ <varlistentry id="guc-archive-command" xreflabel="archive_command">
+ <term><varname>archive_command</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>archive_command</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ The shell command to execute to archive a completed segment of
+ the WAL file series. If this is an empty string (the default),
+ WAL archiving is disabled. Any <literal>%p</> in the string is
+ replaced by the absolute path of the file to archive, and any
+ <literal>%f</> is replaced by the file name only. Use
+ <literal>%%</> to embed an actual <literal>%</> character in the
+ command. For more information see <xref
+ linkend="backup-archiving-wal">. This option can only be set at
+ server start or in the <filename>postgresql.conf</filename>
+ file.
+ </para>
+ <para>
+ It is important for the command to return a zero exit status if
+ and only if it succeeds. Examples:
+<programlisting>
+archive_command = 'cp "%p" /mnt/server/archivedir/"%f"'
+archive_command = 'copy "%p" /mnt/server/archivedir/"%f"' # Windows
+</programlisting>
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect2>
+ </sect1>
+
+ <sect1 id="runtime-config-query">
+ <title>Query Planning</title>
+
+ <sect2 id="runtime-config-query-enable">
+ <title>Planner Method Configuration</title>
+
+ <para>
+ These configuration parameters provide a crude method of
+ influencing the query plans chosen by the query optimizer. If
+ the default plan chosen by the optimizer for a particular query
+ is not optimal, a temporary solution may be found by using one
+ of these configuration parameters to force the optimizer to
+ choose a different plan. Turning one of these settings off
+ permanently is seldom a good idea, however.
+ Better ways to improve the quality of the
+ plans chosen by the optimizer include adjusting the <xref
+ linkend="runtime-config-query-constants"
+ endterm="runtime-config-query-constants-title">, running <xref
+ linkend="sql-analyze" endterm="sql-analyze-title"> more
+ frequently, increasing the value of the <xref
+ linkend="guc-default-statistics-target"> configuration parameter,
+ and increasing the amount of statistics collected for
+ specific columns using <command>ALTER TABLE SET
+ STATISTICS</command>.
+ </para>
+
+ <variablelist>
+ <varlistentry id="guc-enable-bitmapscan" xreflabel="enable_bitmapscan">
+ <term><varname>enable_bitmapscan</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary>bitmap scan</primary>
+ </indexterm>
+ <indexterm>
+ <primary><varname>enable_bitmapscan</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Enables or disables the query planner's use of bitmap-scan plan
+ types. The default is <literal>on</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-enable-hashagg" xreflabel="enable_hashagg">
+ <term><varname>enable_hashagg</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>enable_hashagg</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Enables or disables the query planner's use of hashed
+ aggregation plan types. The default is <literal>on</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-enable-hashjoin" xreflabel="enable_hashjoin">
+ <term><varname>enable_hashjoin</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>enable_hashjoin</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Enables or disables the query planner's use of hash-join plan
+ types. The default is <literal>on</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-enable-indexscan" xreflabel="enable_indexscan">
+ <term><varname>enable_indexscan</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary>index scan</primary>
+ </indexterm>
+ <indexterm>
+ <primary><varname>enable_indexscan</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Enables or disables the query planner's use of index-scan plan
+ types. The default is <literal>on</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-enable-mergejoin" xreflabel="enable_mergejoin">
+ <term><varname>enable_mergejoin</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>enable_mergejoin</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Enables or disables the query planner's use of merge-join plan
+ types. The default is <literal>on</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-enable-nestloop" xreflabel="enable_nestloop">
+ <term><varname>enable_nestloop</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>enable_nestloop</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Enables or disables the query planner's use of nested-loop join
+ plans. It's not possible to suppress nested-loop joins entirely,
+ but turning this variable off discourages the planner from using
+ one if there are other methods available. The default is
+ <literal>on</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-enable-seqscan" xreflabel="enable_seqscan">
+ <term><varname>enable_seqscan</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary>sequential scan</primary>
+ </indexterm>
+ <indexterm>
+ <primary><varname>enable_seqscan</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Enables or disables the query planner's use of sequential scan
+ plan types. It's not possible to suppress sequential scans
+ entirely, but turning this variable off discourages the planner
+ from using one if there are other methods available. The
+ default is <literal>on</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-enable-sort" xreflabel="enable_sort">
+ <term><varname>enable_sort</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>enable_sort</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Enables or disables the query planner's use of explicit sort
+ steps. It's not possible to suppress explicit sorts entirely,
+ but turning this variable off discourages the planner from
+ using one if there are other methods available. The default
+ is <literal>on</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-enable-tidscan" xreflabel="enable_tidscan">
+ <term><varname>enable_tidscan</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>enable_tidscan</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Enables or disables the query planner's use of <acronym>TID</>
+ scan plan types. The default is <literal>on</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect2>
+ <sect2 id="runtime-config-query-constants">
+ <title id="runtime-config-query-constants-title">
+ Planner Cost Constants
+ </title>
+
+ <note>
+ <para>
+ Unfortunately, there is no well-defined method for determining
+ ideal values for the family of <quote>cost</quote> variables that
+ appear below. You are encouraged to experiment and share
+ your findings.
+ </para>
+ </note>
+
+ <variablelist>
+
+ <varlistentry id="guc-effective-cache-size" xreflabel="effective_cache_size">
+ <term><varname>effective_cache_size</varname> (<type>floating point</type>)</term>
+ <indexterm>
+ <primary><varname>effective_cache_size</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Sets the planner's assumption about the effective size of the
+ disk cache that is available to a single index scan. This is
+ factored into estimates of the cost of using an index; a higher
+ value makes it more likely index scans will be used, a lower
+ value makes it more likely sequential scans will be used. When
+ setting this parameter you should consider both
+ <productname>PostgreSQL</productname>'s shared buffers and the
+ portion of the kernel's disk cache that will be used for
+ <productname>PostgreSQL</productname> data files. Also, take into
+ account the expected number of concurrent queries using different
+ indexes, since they will have to share the available space.
+ This parameter has no effect on the size of shared memory
+ allocated by PostgreSQL, nor does it reserve kernel disk cache;
+ it is used only for estimation purposes.
+ The value is measured in disk pages, which are
+ normally 8192 bytes each. The default is 1000.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-random-page-cost" xreflabel="random_page_cost">
+ <term><varname>random_page_cost</varname> (<type>floating point</type>)</term>
+ <indexterm>
+ <primary><varname>random_page_cost</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Sets the planner's estimate of the cost of a
+ nonsequentially fetched disk page. 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. The default is four.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-cpu-tuple-cost" xreflabel="cpu_tuple_cost">
+ <term><varname>cpu_tuple_cost</varname> (<type>floating point</type>)</term>
+ <indexterm>
+ <primary><varname>cpu_tuple_cost</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Sets the planner's estimate of the cost of processing
+ each row during a query. This is measured as a fraction of
+ the cost of a sequential page fetch. The default is 0.01.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-cpu-index-tuple-cost" xreflabel="cpu_index_tuple_cost">
+ <term><varname>cpu_index_tuple_cost</varname> (<type>floating point</type>)</term>
+ <indexterm>
+ <primary><varname>cpu_index_tuple_cost</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Sets the planner's estimate of the cost of processing
+ each index row during an index scan. This is measured as a
+ fraction of the cost of a sequential page fetch. The default
+ is 0.001.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-cpu-operator-cost" xreflabel="cpu_operator_cost">
+ <term><varname>cpu_operator_cost</varname> (<type>floating point</type>)</term>
+ <indexterm>
+ <primary><varname>cpu_operator_cost</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Sets the planner's estimate of the cost of processing each
+ operator in a <literal>WHERE</> clause. This is measured as a fraction of
+ the cost of a sequential page fetch. The default is 0.0025.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+
+ </sect2>
+ <sect2 id="runtime-config-query-geqo">
+ <title>Genetic Query Optimizer</title>
+
+ <variablelist>
+
+ <varlistentry id="guc-geqo" xreflabel="geqo">
+ <indexterm>
+ <primary>genetic query optimization</primary>
+ </indexterm>
+ <indexterm>
+ <primary>GEQO</primary>
+ <see>genetic query optimization</see>
+ </indexterm>
+ <indexterm>
+ <primary><varname>geqo</> configuration parameter</primary>
+ </indexterm>
+ <term><varname>geqo</varname> (<type>boolean</type>)</term>
+ <listitem>
+ <para>
+ Enables or disables genetic query optimization, which is an
+ algorithm that attempts to do query planning without
+ exhaustive searching. This is on by default. The
+ <varname>geqo_threshold</varname> variable provides a more
+ granular way to disable GEQO for certain classes of queries.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-geqo-threshold" xreflabel="geqo_threshold">
+ <term><varname>geqo_threshold</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>geqo_threshold</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Use genetic query optimization to plan queries with at least
+ this many <literal>FROM</> items involved. (Note that an outer
+ <literal>JOIN</> construct counts as only one <literal>FROM</>
+ item.) The default is 12. For simpler queries it is usually best
+ to use the deterministic, exhaustive planner, but for queries with
+ many tables the deterministic planner takes too long.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-geqo-effort" xreflabel="geqo_effort">
+ <term><varname>geqo_effort</varname>
+ (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>geqo_effort</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Controls the trade off between planning time and query plan
+ efficiency in GEQO. This variable must be an integer in the
+ range from 1 to 10. The default value is 5. Larger values
+ increase the time spent doing query planning, but also
+ increase the likelihood that an efficient query plan will be
+ chosen.
+ </para>
+
+ <para>
+ <varname>geqo_effort</varname> doesn't actually do anything
+ directly; it is only used to compute the default values for
+ the other variables that influence GEQO behavior (described
+ below). If you prefer, you can set the other parameters by
+ hand instead.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-geqo-pool-size" xreflabel="geqo_pool_size">
+ <term><varname>geqo_pool_size</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>geqo_pool_size</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Controls the pool size used by GEQO. The pool size is the
+ number of individuals in the genetic population. It must be
+ at least two, and useful values are typically 100 to 1000. If
+ it is set to zero (the default setting) then a suitable
+ default is chosen based on <varname>geqo_effort</varname> and
+ the number of tables in the query.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-geqo-generations" xreflabel="geqo_generations">
+ <term><varname>geqo_generations</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>geqo_generations</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Controls the number of generations used by GEQO. Generations
+ specifies the number of iterations of the algorithm. It must
+ be at least one, and useful values are in the same range as
+ the pool size. If it is set to zero (the default setting)
+ then a suitable default is chosen based on
+ <varname>geqo_pool_size</varname>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-geqo-selection-bias" xreflabel="geqo_selection_bias">
+ <term><varname>geqo_selection_bias</varname> (<type>floating point</type>)</term>
+ <indexterm>
+ <primary><varname>geqo_selection_bias</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Controls the selection bias used by GEQO. The selection bias
+ is the selective pressure within the population. Values can be
+ from 1.50 to 2.00; the latter is the default.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect2>
+ <sect2 id="runtime-config-query-other">
+ <title>Other Planner Options</title>
+
+ <variablelist>
+
+ <varlistentry id="guc-default-statistics-target" xreflabel="default_statistics_target">
+ <term><varname>default_statistics_target</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>default_statistics_target</> configuration parameter</primary>
+ </indexterm>
+ <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 is 10. For more information
+ on the use of statistics by the <productname>PostgreSQL</>
+ query planner, refer to <xref linkend="planner-stats">.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-constraint-exclusion" xreflabel="constraint_exclusion">
+ <term><varname>constraint_exclusion</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary>constraint exclusion</primary>
+ </indexterm>
+ <indexterm>
+ <primary><varname>constraint_exclusion</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Enables or disables the query planner's use of table constraints to
+ limit table access. The default is <literal>off</>.
+ </para>
+
+ <para>
+ When this parameter is <literal>on</>, the planner compares query
+ conditions with table CHECK constraints, and omits scanning tables
+ where the conditions contradict the constraints. (Presently
+ this is done only for child tables of inheritance scans.) For
+ example:
+
+<programlisting>
+CREATE TABLE parent(key integer, ...);
+CREATE TABLE child1000(check (key between 1000 and 1999)) INHERITS(parent);
+CREATE TABLE child2000(check (key between 2000 and 2999)) INHERITS(parent);
+...
+SELECT * FROM parent WHERE key = 2400;
+</programlisting>
+
+ With constraint exclusion enabled, this SELECT will not scan
+ <structname>child1000</> at all. This can improve performance when
+ inheritance is used to build partitioned tables.
+ </para>
+
+ <para>
+ Currently, <varname>constraint_exclusion</> defaults to
+ <literal>off</>, because it risks incorrect results if
+ query plans are cached --- if a table constraint is changed or dropped,
+ the previously generated plan might now be wrong, and there is no
+ built-in mechanism to force re-planning. (This deficiency will
+ probably be addressed in a future
+ <productname>PostgreSQL</productname> release.) Another reason
+ for keeping it off is that the constraint checks are relatively
+ expensive, and in many circumstances will yield no savings.
+ It is recommended to turn this on only if you are actually using
+ partitioned tables designed to take advantage of the feature.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-from-collapse-limit" xreflabel="from_collapse_limit">
+ <term><varname>from_collapse_limit</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>from_collapse_limit</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ The planner will merge sub-queries into upper queries if the
+ resulting <literal>FROM</literal> list would have no more than
+ this many items. Smaller values reduce planning time but may
+ yield inferior query plans. The default is 8. It is usually
+ wise to keep this less than <xref linkend="guc-geqo-threshold">.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-join-collapse-limit" xreflabel="join_collapse_limit">
+ <term><varname>join_collapse_limit</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>join_collapse_limit</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ The planner will rewrite explicit inner <literal>JOIN</>
+ constructs into lists of <literal>FROM</> items whenever a
+ list of no more than this many items in total would
+ result. Prior to <productname>PostgreSQL</> 7.4, joins
+ specified via the <literal>JOIN</literal> construct would
+ never be reordered by the query planner. The query planner has
+ subsequently been improved so that inner joins written in this
+ form can be reordered; this configuration parameter controls
+ the extent to which this reordering is performed.
+ <note>
+ <para>
+ At present, the order of outer joins specified via the
+ <literal>JOIN</> construct is never adjusted by the query
+ planner; therefore, <varname>join_collapse_limit</> has no
+ effect on this behavior. The planner may be improved to
+ reorder some classes of outer joins in a future release of
+ <productname>PostgreSQL</productname>.
+ </para>
+ </note>
+ </para>
+
+ <para>
+ By default, this variable is set the same as
+ <varname>from_collapse_limit</varname>, which is appropriate
+ for most uses. Setting it to 1 prevents any reordering of
+ inner <literal>JOIN</>s. Thus, the explicit join order
+ specified in the query will be the actual order in which the
+ relations are joined. The query planner does not always choose
+ the optimal join order; advanced users may elect to
+ temporarily set this variable to 1, and then specify the join
+ order they desire explicitly. Another consequence of setting
+ this variable to 1 is that the query planner will behave more
+ like the <productname>PostgreSQL</productname> 7.3 query
+ planner, which some users might find useful for backward
+ compatibility reasons.
+ </para>
+
+ <para>
+ Setting this variable to a value between 1 and
+ <varname>from_collapse_limit</varname> might be useful to
+ trade off planning time against the quality of the chosen plan
+ (higher values produce better plans).
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect2>
+ </sect1>
+
+ <sect1 id="runtime-config-logging">
+ <title>Error Reporting and Logging</title>
+
+ <indexterm zone="runtime-config-logging">
+ <primary>server log</primary>
+ </indexterm>
+
+ <sect2 id="runtime-config-logging-where">
+ <title>Where to log</title>
+
+ <indexterm zone="runtime-config-logging-where">
+ <primary>where to log</primary>
+ </indexterm>
+
+ <variablelist>
+
+ <varlistentry id="guc-log-destination" xreflabel="log_destination">
+ <term><varname>log_destination</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>log_destination</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ <productname>PostgreSQL</productname> supports several methods
+ for logging server messages, including
+ <systemitem>stderr</systemitem> and
+ <systemitem>syslog</systemitem>. On Windows,
+ <systemitem>eventlog</systemitem> is also supported. Set this
+ option to a list of desired log destinations separated by
+ commas. The default is to log to <systemitem>stderr</systemitem>
+ only.
+ This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> configuration file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-redirect-stderr" xreflabel="redirect_stderr">
+ <term><varname>redirect_stderr</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>redirect_stderr</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ This option allows messages sent to <application>stderr</> to be
+ captured and redirected into log files.
+ This option, in combination with logging to <application>stderr</>,
+ is often more useful than
+ logging to <application>syslog</>, since some types of messages
+ may not appear in <application>syslog</> output (a common example
+ is dynamic-linker failure messages).
+ This option can only be set at server start.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-log-directory" xreflabel="log_directory">
+ <term><varname>log_directory</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>log_directory</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ When <varname>redirect_stderr</> is enabled, this option
+ determines the directory in which log files will be created.
+ It may be specified as an absolute path, or relative to the
+ cluster data directory.
+ This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> configuration file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-log-filename" xreflabel="log_filename">
+ <term><varname>log_filename</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>log_filename</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ When <varname>redirect_stderr</varname> is enabled, this option
+ sets the file names of the created log files. The value
+ is treated as a <systemitem>strftime</systemitem> pattern,
+ so <literal>%</literal>-escapes
+ can be used to specify time-varying file names.
+ If no <literal>%</literal>-escapes are present,
+ <productname>PostgreSQL</productname> will
+ append the epoch of the new log file's open time. For example,
+ if <varname>log_filename</varname> were <literal>server_log</literal>, then the
+ chosen file name would be <literal>server_log.1093827753</literal>
+ for a log starting at Sun Aug 29 19:02:33 2004 MST.
+ This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> configuration file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-log-rotation-age" xreflabel="log_rotation_age">
+ <term><varname>log_rotation_age</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>log_rotation_age</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ When <varname>redirect_stderr</varname> is enabled, this option
+ determines the maximum lifetime of an individual log file.
+ After this many minutes have elapsed, a new log file will
+ be created. Set to zero to disable time-based creation of
+ new log files.
+ This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> configuration file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-log-rotation-size" xreflabel="log_rotation_size">
+ <term><varname>log_rotation_size</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>log_rotation_size</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ When <varname>redirect_stderr</varname> is enabled, this option
+ determines the maximum size of an individual log file.
+ After this many kilobytes have been emitted into a log file,
+ a new log file will be created. Set to zero to disable size-based
+ creation of new log files.
+ This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> configuration file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-log-truncate-on-rotation" xreflabel="log_truncate_on_rotation">
+ <term><varname>log_truncate_on_rotation</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>log_truncate_on_rotation</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ When <varname>redirect_stderr</varname> is enabled, this option will cause
+ <productname>PostgreSQL</productname> to truncate (overwrite),
+ rather than append to, any existing log file of the same name.
+ However, truncation will occur only when a new file is being opened
+ due to time-based rotation, not during server startup or size-based
+ rotation. When off, pre-existing files will be appended to in
+ all cases. For example, using this option in combination with
+ a <varname>log_filename</varname> like <literal>postgresql-%H.log</literal>
+ would result in generating twenty-four hourly log files and then
+ cyclically overwriting them.
+ This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> configuration file.
+ </para>
+ <para>
+ Example: To keep 7 days of logs, one log file per day named
+ <literal>server_log.Mon</literal>, <literal>server_log.Tue</literal>,
+ etc, and automatically overwrite last week's log with this week's log,
+ set <varname>log_filename</varname> to <literal>server_log.%a</literal>,
+ <varname>log_truncate_on_rotation</varname> to <literal>on</literal>, and
+ <varname>log_rotation_age</varname> to <literal>1440</literal>.
+ </para>
+ <para>
+ Example: To keep 24 hours of logs, one log file per hour, but
+ also rotate sooner if the log file size exceeds 1GB, set
+ <varname>log_filename</varname> to <literal>server_log.%H%M</literal>,
+ <varname>log_truncate_on_rotation</varname> to <literal>on</literal>,
+ <varname>log_rotation_age</varname> to <literal>60</literal>, and
+ <varname>log_rotation_size</varname> to <literal>1000000</literal>.
+ Including <literal>%M</> in <varname>log_filename</varname> allows
+ any size-driven rotations that may occur to select a filename
+ different from the hour's initial filename.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-syslog-facility" xreflabel="syslog_facility">
+ <term><varname>syslog_facility</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>syslog_facility</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ When logging to <application>syslog</> is enabled, this option
+ determines the <application>syslog</application>
+ <quote>facility</quote> to be used. You may choose
+ from <literal>LOCAL0</>, <literal>LOCAL1</>,
+ <literal>LOCAL2</>, <literal>LOCAL3</>, <literal>LOCAL4</>,
+ <literal>LOCAL5</>, <literal>LOCAL6</>, <literal>LOCAL7</>;
+ the default is <literal>LOCAL0</>. See also the
+ documentation of your system's
+ <application>syslog</application> daemon.
+ This option can only be set at server start.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-syslog-ident" xreflabel="syslog_ident">
+ <term><varname>syslog_ident</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>syslog_identity</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ When logging to <application>syslog</> is enabled, this option
+ determines the program name used to identify
+ <productname>PostgreSQL</productname> messages in
+ <application>syslog</application> logs. The default is
+ <literal>postgres</literal>.
+ This option can only be set at server start.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect2>
+ <sect2 id="runtime-config-logging-when">
+ <title>When To Log</title>
+
+ <variablelist>
+
+ <varlistentry id="guc-client-min-messages" xreflabel="client_min_messages">
+ <term><varname>client_min_messages</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>client_min_messages</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Controls which message levels are sent to the client.
+ Valid values are <literal>DEBUG5</>,
+ <literal>DEBUG4</>, <literal>DEBUG3</>, <literal>DEBUG2</>,
+ <literal>DEBUG1</>, <literal>LOG</>, <literal>NOTICE</>,
+ <literal>WARNING</>, and <literal>ERROR</>. Each level
+ includes all the levels that follow it. The later the level,
+ the fewer messages are sent. The default is
+ <literal>NOTICE</>. Note that <literal>LOG</> has a different
+ rank here than in <varname>log_min_messages</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-log-min-messages" xreflabel="log_min_messages">
+ <term><varname>log_min_messages</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>log_min_messages</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Controls which message levels are written to the server log.
+ Valid values are <literal>DEBUG5</>, <literal>DEBUG4</>,
+ <literal>DEBUG3</>, <literal>DEBUG2</>, <literal>DEBUG1</>,
+ <literal>INFO</>, <literal>NOTICE</>, <literal>WARNING</>,
+ <literal>ERROR</>, <literal>LOG</>, <literal>FATAL</>, and
+ <literal>PANIC</>. Each level includes all the levels that
+ follow it. The later the level, the fewer messages are sent
+ to the log. The default is <literal>NOTICE</>. Note that
+ <literal>LOG</> has a different rank here than in
+ <varname>client_min_messages</>.
+ Only superusers can change this setting.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-log-error-verbosity" xreflabel="log_error_verbosity">
+ <term><varname>log_error_verbosity</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>log_error_verbosity</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Controls the amount of detail written in the server log for each
+ message that is logged. Valid values are <literal>TERSE</>,
+ <literal>DEFAULT</>, and <literal>VERBOSE</>, each adding more
+ fields to displayed messages.
+ Only superusers can change this setting.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-log-min-error-statement" xreflabel="log_min_error_statement">
+ <term><varname>log_min_error_statement</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>log_min_error_statement</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Controls whether or not the SQL statement that causes an error
+ condition will also be recorded in the server log. All SQL
+ statements that cause an error of the specified level or
+ higher are logged. The default is
+ <literal>PANIC</literal> (effectively turning this feature
+ off for normal use). Valid values are <literal>DEBUG5</literal>,
+ <literal>DEBUG4</literal>, <literal>DEBUG3</literal>,
+ <literal>DEBUG2</literal>, <literal>DEBUG1</literal>,
+ <literal>INFO</literal>, <literal>NOTICE</literal>,
+ <literal>WARNING</literal>, <literal>ERROR</literal>,
+ <literal>FATAL</literal>, and <literal>PANIC</literal>. For
+ example, if you set this to <literal>ERROR</literal> then all
+ SQL statements causing errors, fatal errors, or panics will be
+ logged. Enabling this option can be helpful in tracking down
+ the source of any errors that appear in the server log.
+ Only superusers can change this setting.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-log-min-duration-statement" xreflabel="log_min_duration_statement">
+ <term><varname>log_min_duration_statement</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>log_min_duration_statement</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Logs the statement and its duration on a single log line if its
+ duration is greater than or equal to the specified number of
+ milliseconds. Setting this to zero will print all statements
+ and their durations. Minus-one (the default) disables the
+ feature. For example, if you set it to <literal>250</literal>
+ then all SQL statements that run 250ms or longer will be
+ logged. Enabling this option can be useful in tracking down
+ unoptimized queries in your applications. This setting is
+ independent of <varname>log_statement</varname> and
+ <varname>log_duration</varname>. Only superusers can change
+ this setting.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-silent-mode" xreflabel="silent_mode">
+ <term><varname>silent_mode</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>silent_mode</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Runs the server silently. If this option is set, the server
+ will automatically run in background and any controlling
+ terminals are disassociated (same effect as
+ <command>postmaster</>'s <option>-S</option> option).
+ The server's standard output and standard error are redirected
+ to <literal>/dev/null</>, so any messages sent to them will be lost.
+ Unless <application>syslog</> logging is selected or
+ <varname>redirect_stderr</> is enabled, using this option
+ is discouraged because it makes it impossible to see error messages.
+ </para>
+ </listitem>
+ </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 command 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>
+
+ </sect2>
+ <sect2 id="runtime-config-logging-what">
+ <title>What To Log</title>
+
+ <variablelist>
+
+ <varlistentry>
+ <term><varname>debug_print_parse</varname> (<type>boolean</type>)</term>
+ <term><varname>debug_print_rewritten</varname> (<type>boolean</type>)</term>
+ <term><varname>debug_print_plan</varname> (<type>boolean</type>)</term>
+ <term><varname>debug_pretty_print</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>debug_print_parse</> configuration parameter</primary>
+ </indexterm>
+ <indexterm>
+ <primary><varname>debug_print_rewritten</> configuration parameter</primary>
+ </indexterm>
+ <indexterm>
+ <primary><varname>debug_print_plan</> configuration parameter</primary>
+ </indexterm>
+ <indexterm>
+ <primary><varname>debug_pretty_print</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ These options enable various debugging output to be emitted.
+ For each executed query, they print
+ the resulting parse tree, the query rewriter output, or the
+ execution plan. <varname>debug_pretty_print</varname> indents
+ these displays to produce a more readable but much longer
+ output format. <varname>client_min_messages</varname> or
+ <varname>log_min_messages</varname> must be
+ <literal>DEBUG1</literal> or lower to actually send this output
+ to the client or the server log, respectively.
+ These options are off by default.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-log-connections" xreflabel="log_connections">
+ <term><varname>log_connections</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>log_connections</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ This outputs a line to the server log detailing each successful
+ connection. This is off by default, although it is probably very
+ useful. This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> configuration file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-log-disconnections" xreflabel="log_disconnections">
+ <term><varname>log_disconnections</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>log_disconnections</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ This outputs a line in the server log similar to
+ <varname>log_connections</varname> but at session termination,
+ and includes the duration of the session. This is off by
+ default. This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> configuration file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+
+ <varlistentry id="guc-log-duration" xreflabel="log_duration">
+ <term><varname>log_duration</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>log_duration</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Causes the duration of every completed statement which satisfies
+ <varname>log_statement</> to be logged. When using this option,
+ if you are not using <application>syslog</>, it is recommended
+ that you log the PID or session ID using <varname>log_line_prefix</>
+ so that you can link the statement to the
+ duration using the process ID or session ID. The default is
+ <literal>off</>. Only superusers can change this setting.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-log-line-prefix" xreflabel="log_line_prefix">
+ <term><varname>log_line_prefix</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>log_line_prefix</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ This is a <function>printf</>-style string that is output at the
+ beginning of each log line. The default is an empty string.
+ Each recognized escape is replaced as outlined
+ below - anything else that looks like an escape is ignored. Other
+ characters are copied straight to the log line. Some escapes are
+ only recognised by session processes, and do not apply to
+ background processes such as the postmaster. <application>Syslog</>
+ produces its own
+ time stamp and process ID information, so you probably do not want to
+ use those escapes if you are using <application>syslog</>.
+ This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> configuration file.
+
+ <informaltable>
+ <tgroup cols="3">
+ <thead>
+ <row>
+ <entry>Escape</entry>
+ <entry>Effect</entry>
+ <entry>Session only</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry><literal>%u</literal></entry>
+ <entry>User name</entry>
+ <entry>yes</entry>
+ </row>
+ <row>
+ <entry><literal>%d</literal></entry>
+ <entry>Database name</entry>
+ <entry>yes</entry>
+ </row>
+ <row>
+ <entry><literal>%r</literal></entry>
+ <entry>Remote host name or IP address, and remote port</entry>
+ <entry>yes</entry>
+ </row>
+ <row>
+ <entry><literal>%h</literal></entry>
+ <entry>Remote Hostname or IP address</entry>
+ <entry>yes</entry>
+ </row>
+ <row>
+ <entry><literal>%p</literal></entry>
+ <entry>Process ID</entry>
+ <entry>no</entry>
+ </row>
+ <row>
+ <entry><literal>%t</literal></entry>
+ <entry>Time stamp (no milliseconds)</entry>
+ <entry>no</entry>
+ </row>
+ <row>
+ <entry><literal>%m</literal></entry>
+ <entry>Time stamp with milliseconds</entry>
+ <entry>no</entry>
+ </row>
+ <row>
+ <entry><literal>%i</literal></entry>
+ <entry>Command tag: This is the command that generated the log line.</entry>
+ <entry>yes</entry>
+ </row>
+ <row>
+ <entry><literal>%c</literal></entry>
+ <entry>Session ID: A unique identifier for each session.
+ It is 2 4-byte hexadecimal numbers (without leading zeros)
+ separated by a dot. The numbers
+ are the session start time and the process ID, so this can also
+ be used as a space saving way of printing these items.</entry>
+ <entry>yes</entry>
+ </row>
+ <row>
+ <entry><literal>%l</literal></entry>
+ <entry>Number of the log line for each process, starting at 1</entry>
+ <entry>no</entry>
+ </row>
+ <row>
+ <entry><literal>%s</literal></entry>
+ <entry>Session start time stamp</entry>
+ <entry>yes</entry>
+ </row>
+ <row>
+ <entry><literal>%x</literal></entry>
+ <entry>Transaction ID</entry>
+ <entry>yes</entry>
+ </row>
+ <row>
+ <entry><literal>%q</literal></entry>
+ <entry>Does not produce any output, but tells non-session
+ processes to stop at this point in the string. Ignored by
+ session processes.</entry>
+ <entry>no</entry>
+ </row>
+ <row>
+ <entry><literal>%%</literal></entry>
+ <entry>Literal <literal>%</></entry>
+ <entry>no</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-log-statement" xreflabel="log_statement">
+ <term><varname>log_statement</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>log_statement</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Controls which SQL statements are logged. Valid values are
+ <literal>none</>, <literal>ddl</>, <literal>mod</>, and
+ <literal>all</>. <literal>ddl</> logs all data definition
+ commands like <literal>CREATE</>, <literal>ALTER</>, and
+ <literal>DROP</> commands. <literal>mod</> logs all
+ <literal>ddl</> statements, plus <literal>INSERT</>,
+ <literal>UPDATE</>, <literal>DELETE</>, <literal>TRUNCATE</>,
+ and <literal>COPY FROM</>. <literal>PREPARE</> and
+ <literal>EXPLAIN ANALYZE</> statements are also logged if their
+ contained command is of an appropriate type.
+ </para>
+ <para>
+ The default is <literal>none</>. Only superusers can change this
+ setting.
+ </para>
+
+ <note>
+ <para>
+ The <command>EXECUTE</command> statement is not considered a
+ <literal>ddl</> or <literal>mod</> statement. When it is logged,
+ only the name of the prepared statement is reported, not the
+ actual prepared statement.
+ </para>
+
+ <para>
+ When a function is defined in the
+ <application>PL/pgSQL</application>server-side language, any queries
+ executed by the function will only be logged the first time that the
+ function is invoked in a particular session. This is because
+ <application>PL/pgSQL</application> keeps a cache of the
+ query plans produced for the SQL statements in the function.
+ </para>
+ </note>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-log-hostname" xreflabel="log_hostname">
+ <term><varname>log_hostname</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>log_hostname</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ By default, connection log messages only show the IP address of the
+ connecting host. Turning on this option causes logging of the
+ host name as well. Note that depending on your host name resolution
+ setup this might impose a non-negligible performance penalty. This
+ option can only be set at server start or in the
+ <filename>postgresql.conf</filename> file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect2>
+ </sect1>
+
+ <sect1 id="runtime-config-statistics">
+ <title>Runtime Statistics</title>
+
+ <sect2 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>
+ <indexterm>
+ <primary><varname>log_statement_stats</> configuration parameter</primary>
+ </indexterm>
+ <indexterm>
+ <primary><varname>log_parser_stats</> configuration parameter</primary>
+ </indexterm>
+ <indexterm>
+ <primary><varname>log_planner_stats</> configuration parameter</primary>
+ </indexterm>
+ <indexterm>
+ <primary><varname>log_executor_stats</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ For each query, write performance statistics of the respective
+ module to the server log. This is a crude profiling
+ instrument. <varname>log_statement_stats</varname> reports total
+ statement statistics, while the others report per-module statistics.
+ <varname>log_statement_stats</varname> cannot be enabled together with
+ any of the per-module options. All of these options are disabled by
+ default. Only superusers can change these settings.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+
+ </sect2>
+ <sect2 id="runtime-config-statistics-collector">
+ <title>Query and Index Statistics Collector</title>
+ <variablelist>
+
+ <varlistentry id="guc-stats-start-collector" xreflabel="stats_start_collector">
+ <term><varname>stats_start_collector</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>stats_start_collector</> configuration parameter</primary>
+ </indexterm>
+ <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 id="guc-stats-command-string" xreflabel="stats_command_string">
+ <term><varname>stats_command_string</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>stats_command_string</> configuration parameter</primary>
+ </indexterm>
+ <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 id="guc-stats-block-level" xreflabel="stats_block_level">
+ <term><varname>stats_block_level</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>stats_block_level</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Enables the collection of block-level statistics on database
+ activity. This option is disabled by default. If this option
+ is enabled, the data that is produced 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 id="guc-stats-row-level" xreflabel="stats_row_level">
+ <term><varname>stats_row_level</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>stats_row_level</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Enables the collection of row-level statistics on database
+ activity. This option is disabled by default. If this option
+ is enabled, the data that is produced 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 id="guc-stats-reset-on-server-start" xreflabel="stats_reset_on_server_start">
+ <term><varname>stats_reset_on_server_start</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>stats_reset_on_server_start</> configuration parameter</primary>
+ </indexterm>
+ <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 <literal>off</>. This option can only
+ be set at server start.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect2>
+ </sect1>
+
+ <sect1 id="runtime-config-autovacuum">
+ <title>Automatic Vacuuming</title>
+
+ <para>
+ Beginning in <productname>PostgreSQL</> 8.1, there is an optional server
+ process called the <firstterm>autovacuum daemon</>, whose purpose is
+ to automate the issuance of periodic <command>VACUUM</> and
+ <command>ANALYZE</> commands. When enabled, the autovacuum daemon
+ runs periodically and checks for tables that have had a large number
+ of updated or deleted tuples. This check uses the row-level statistics
+ collection facility; therefore, the autovacuum daemon cannot be used
+ unless <xref linkend="guc-stats-start-collector"> and
+ <xref linkend="guc-stats-row-level"> are set TRUE. Also, it's
+ important to allow a slot for the autovacuum process when choosing
+ the value of <xref linkend="guc-superuser-reserved-connections">.
+ </para>
+
+ <variablelist>
+
+ <varlistentry id="guc-autovacuum" xreflabel="autovacuum">
+ <term><varname>autovacuum</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>autovacuum</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Controls whether the server should start the
+ autovacuum subprocess. This is off by default.
+ This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-autovacuum-naptime" xreflabel="autovacuum_naptime">
+ <term><varname>autovacuum_naptime</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>autovacuum_naptime</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specifies the delay between activity rounds for the autovacuum
+ subprocess. In each round the subprocess examines one database
+ and issues <command>VACUUM</> and <command>ANALYZE</> commands
+ as needed for tables in that database. The delay is measured
+ in seconds, and the default is 60.
+ This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-autovacuum-vacuum-threshold" xreflabel="autovacuum_vacuum_threshold">
+ <term><varname>autovacuum_vacuum_threshold</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>autovacuum_vacuum_threshold</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specifies the minimum number of updated or deleted tuples needed
+ to trigger a <command>VACUUM</> in any one table.
+ The default is 1000.
+ This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-autovacuum-analyze-threshold" xreflabel="autovacuum_analyze_threshold">
+ <term><varname>autovacuum_analyze_threshold</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>autovacuum_analyze_threshold</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specifies the minimum number of inserted, updated or deleted tuples
+ needed to trigger an <command>ANALYZE</> in any one table.
+ The default is 500.
+ This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-autovacuum-vacuum-scale-factor" xreflabel="autovacuum_vacuum_scale_factor">
+ <term><varname>autovacuum_vacuum_scale_factor</varname> (<type>floating point</type>)</term>
+ <indexterm>
+ <primary><varname>autovacuum_vacuum_scale_factor</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specifies a fraction of the table size to add to
+ <varname>autovacuum_vacuum_threshold</varname>
+ when deciding whether to trigger a <command>VACUUM</>.
+ The default is 0.4.
+ This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-autovacuum-analyze-scale-factor" xreflabel="autovacuum_analyze_scale_factor">
+ <term><varname>autovacuum_analyze_scale_factor</varname> (<type>floating point</type>)</term>
+ <indexterm>
+ <primary><varname>autovacuum_analyze_scale_factor</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specifies a fraction of the table size to add to
+ <varname>autovacuum_analyze_threshold</varname>
+ when deciding whether to trigger an <command>ANALYZE</>.
+ The default is 0.2.
+ This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-autovacuum-vacuum-cost-delay" xreflabel="autovacuum_vacuum_cost_delay">
+ <term><varname>autovacuum_vacuum_cost_delay</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>autovacuum_vacuum_cost_delay</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specifies the cost delay value that will be used in automatic
+ <command>VACUUM</> operations. If -1 is specified (which is the
+ default), the regular
+ <xref linkend="guc-vacuum-cost-delay"> value will be used.
+ This setting can be overridden for individual tables by entries in
+ <structname>pg_autovacuum</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-autovacuum-vacuum-cost-limit" xreflabel="autovacuum_vacuum_cost_limit">
+ <term><varname>autovacuum_vacuum_cost_limit</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>autovacuum_vacuum_cost_limit</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specifies the cost limit value that will be used in automatic
+ <command>VACUUM</> operations. If -1 is specified (which is the
+ default), the regular
+ <xref linkend="guc-vacuum-cost-limit"> value will be used.
+ This setting can be overridden for individual tables by entries in
+ <structname>pg_autovacuum</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect1>
+
+ <sect1 id="runtime-config-client">
+ <title>Client Connection Defaults</title>
+
+ <sect2 id="runtime-config-client-statement">
+ <title>Statement Behavior</title>
+ <variablelist>
+
+ <varlistentry id="guc-search-path" xreflabel="search_path">
+ <term><varname>search_path</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>search_path</> configuration parameter</primary>
+ </indexterm>
+ <indexterm><primary>path</><secondary>for schemas</></>
+ <listitem>
+ <para>
+ This variable specifies the order in which schemas are searched
+ when an object (table, data type, function, etc.) is referenced by a
+ simple name with no schema component. When there are objects of
+ identical names in different schemas, the one found first
+ in the search path is used. An object that is not in any of the
+ schemas in the search path can only be referenced by specifying
+ its containing schema with a qualified (dotted) name.
+ </para>
+
+ <para>
+ The value for <varname>search_path</varname> has to be a comma-separated
+ list of schema names. If one of the list items is
+ the special value <literal>$user</literal>, then the schema
+ having the name returned by <function>SESSION_USER</> is substituted, if there
+ is such a schema. (If not, <literal>$user</literal> is ignored.)
+ </para>
+
+ <para>
+ The system catalog schema, <literal>pg_catalog</>, is always
+ searched, whether it is mentioned in the path or not. If it is
+ mentioned in the path then it will be searched in the specified
+ order. If <literal>pg_catalog</> is not in the path then it will
+ be searched <emphasis>before</> searching any of the path items.
+ It should also be noted that the temporary-table schema,
+ <literal>pg_temp_<replaceable>nnn</></>, is implicitly searched before any of
+ these.
+ </para>
+
+ <para>
+ When objects are created without specifying a particular target
+ schema, they will be placed in the first schema listed
+ in the search path. An error is reported if the search path is
+ empty.
+ </para>
+
+ <para>
+ The default value for this parameter is
+ <literal>'$user, public'</literal> (where the second part will be
+ ignored if there is no schema named <literal>public</>).
+ This supports shared use of a database (where no users
+ have private schemas, and all share use of <literal>public</>),
+ private per-user schemas, and combinations of these. Other
+ effects can be obtained by altering the default search path
+ setting, either globally or per-user.
+ </para>
+
+ <para>
+ The current effective value of the search path can be examined
+ via the <acronym>SQL</acronym> function
+ <function>current_schemas()</>. This is not quite the same as
+ examining the value of <varname>search_path</varname>, since
+ <function>current_schemas()</> shows how the requests
+ appearing in <varname>search_path</varname> were resolved.
+ </para>
+
+ <para>
+ For more information on schema handling, see <xref linkend="ddl-schemas">.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-default-tablespace" xreflabel="default_tablespace">
+ <term><varname>default_tablespace</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>default_tablespace</> configuration parameter</primary>
+ </indexterm>
+ <indexterm><primary>tablespace</><secondary>default</></>
+ <listitem>
+ <para>
+ This variable specifies the default tablespace in which to create
+ objects (tables and indexes) when a <command>CREATE</> command does
+ not explicitly specify a tablespace.
+ </para>
+
+ <para>
+ The value is either the name of a tablespace, or an empty string
+ to specify using the default tablespace of the current database.
+ If the value does not match the name of any existing tablespace,
+ <productname>PostgreSQL</> will automatically use the default
+ tablespace of the current database.
+ </para>
+
+ <para>
+ For more information on tablespaces,
+ see <xref linkend="manage-ag-tablespaces">.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-check-function-bodies" xreflabel="check_function_bodies">
+ <term><varname>check_function_bodies</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>check_function_bodies</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ This parameter is normally on. When set to <literal>off</>, it
+ disables validation of the function body string during <xref
+ linkend="sql-createfunction"
+ endterm="sql-createfunction-title">. Disabling validation is
+ occasionally useful to avoid problems such as forward references
+ when restoring function definitions from a dump.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-default-transaction-isolation" xreflabel="default_transaction_isolation">
+ <indexterm>
+ <primary>transaction isolation level</primary>
+ </indexterm>
+ <indexterm>
+ <primary><varname>default_transaction_isolation</> configuration parameter</primary>
+ </indexterm>
+ <term><varname>default_transaction_isolation</varname> (<type>string</type>)</term>
+ <listitem>
+ <para>
+ Each SQL transaction has an isolation level, which can be
+ either <quote>read uncommitted</quote>, <quote>read
+ committed</quote>, <quote>repeatable read</quote>, or
+ <quote>serializable</quote>. This parameter controls the
+ default isolation level of each new transaction. The default
+ is <quote>read committed</quote>.
+ </para>
+
+ <para>
+ Consult <xref linkend="mvcc"> and <xref
+ linkend="sql-set-transaction"
+ endterm="sql-set-transaction-title"> for more information.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-default-transaction-read-only" xreflabel="default_transaction_read_only">
+ <indexterm>
+ <primary>read-only transaction</primary>
+ </indexterm>
+ <indexterm>
+ <primary><varname>default_transaction_read_only</> configuration parameter</primary>
+ </indexterm>
+
+ <term><varname>default_transaction_read_only</varname> (<type>boolean</type>)</term>
+ <listitem>
+ <para>
+ A read-only SQL transaction cannot alter non-temporary tables.
+ This parameter controls the default read-only status of each new
+ transaction. The default is <literal>off</> (read/write).
+ </para>
+
+ <para>
+ Consult <xref linkend="sql-set-transaction"
+ endterm="sql-set-transaction-title"> for more information.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-statement-timeout" xreflabel="statement_timeout">
+ <term><varname>statement_timeout</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>statement_timeout</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Abort any statement that takes over the specified number of
+ milliseconds. A value of zero (the default) turns off the limitation.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect2>
+ <sect2 id="runtime-config-client-format">
+ <title>Locale and Formatting</title>
+
+ <variablelist>
+
+ <varlistentry id="guc-datestyle" xreflabel="DateStyle">
+ <term><varname>DateStyle</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>DateStyle</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Sets the display format for date and time values, as well as the
+ rules for interpreting ambiguous date input values. For
+ historical reasons, this variable contains two independent
+ components: the output format specification (<literal>ISO</>,
+ <literal>Postgres</>, <literal>SQL</>, or <literal>German</>)
+ and the input/output specification for year/month/day ordering
+ (<literal>DMY</>, <literal>MDY</>, or <literal>YMD</>). These
+ can be set separately or together. The keywords <literal>Euro</>
+ and <literal>European</> are synonyms for <literal>DMY</>; the
+ keywords <literal>US</>, <literal>NonEuro</>, and
+ <literal>NonEuropean</> are synonyms for <literal>MDY</>. See
+ <xref linkend="datatype-datetime"> for more information. The
+ default is <literal>ISO, MDY</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-timezone" xreflabel="timezone">
+ <term><varname>timezone</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>timezone</> configuration parameter</primary>
+ </indexterm>
+ <indexterm><primary>time zone</></>
+ <listitem>
+ <para>
+ Sets the time zone for displaying and interpreting time
+ stamps. The default is 'unknown', which means to use whatever
+ the system environment specifies as the time zone. See <xref
+ linkend="datatype-datetime"> for more information.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-australian-timezones" xreflabel="australian_timezones">
+ <term><varname>australian_timezones</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>australian_timezones</> configuration parameter</primary>
+ </indexterm>
+ <indexterm><primary>time zone</><secondary>Australian</></>
+ <listitem>
+ <para>
+ If set to on, <literal>ACST</literal>,
+ <literal>CST</literal>, <literal>EST</literal>, and
+ <literal>SAT</literal> are interpreted as Australian time
+ zones rather than as North/South American time zones and
+ Saturday. The default is <literal>off</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-extra-float-digits" xreflabel="extra_float_digits">
+ <indexterm>
+ <primary>significant digits</primary>
+ </indexterm>
+ <indexterm>
+ <primary>floating-point</primary>
+ <secondary>display</secondary>
+ </indexterm>
+ <indexterm>
+ <primary><varname>extra_float_digits</> configuration parameter</primary>
+ </indexterm>
+
+ <term><varname>extra_float_digits</varname> (<type>integer</type>)</term>
+ <listitem>
+ <para>
+ This parameter adjusts the number of digits displayed for
+ floating-point values, including <type>float4</>, <type>float8</>,
+ and geometric data types. The parameter value is added to the
+ standard number of digits (<literal>FLT_DIG</> or <literal>DBL_DIG</>
+ as appropriate). The value can be set as high as 2, to include
+ partially-significant digits; this is especially useful for dumping
+ float data that needs to be restored exactly. Or it can be set
+ negative to suppress unwanted digits.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-client-encoding" xreflabel="client_encoding">
+ <term><varname>client_encoding</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>client_encoding</> configuration parameter</primary>
+ </indexterm>
+ <indexterm><primary>character set</></>
+ <listitem>
+ <para>
+ Sets the client-side encoding (character set).
+ The default is to use the database encoding.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-lc-messages" xreflabel="lc_messages">
+ <term><varname>lc_messages</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>lc_messages</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Sets the language in which messages are displayed. Acceptable
+ values are system-dependent; see <xref linkend="locale"> for
+ more information. If this variable is set to the empty string
+ (which is the default) then the value is inherited from the
+ execution environment of the server in a system-dependent way.
+ </para>
+
+ <para>
+ On some systems, this locale category does not exist. Setting
+ this variable will still work, but there will be no effect.
+ Also, there is a chance that no translated messages for the
+ desired language exist. In that case you will continue to see
+ the English messages.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-lc-monetary" xreflabel="lc_monetary">
+ <term><varname>lc_monetary</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>lc_monetary</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Sets the locale to use for formatting monetary amounts, for
+ example with the <function>to_char</function> family of
+ functions. Acceptable values are system-dependent; see <xref
+ linkend="locale"> for more information. If this variable is
+ set to the empty string (which is the default) then the value
+ is inherited from the execution environment of the server in a
+ system-dependent way.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-lc-numeric" xreflabel="lc_numeric">
+ <term><varname>lc_numeric</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>lc_numeric</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Sets the locale to use for formatting numbers, for example
+ with the <function>to_char</function> family of
+ functions. Acceptable values are system-dependent; see <xref
+ linkend="locale"> for more information. If this variable is
+ set to the empty string (which is the default) then the value
+ is inherited from the execution environment of the server in a
+ system-dependent way.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-lc-time" xreflabel="lc_time">
+ <term><varname>lc_time</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>lc_time</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Sets the locale to use for formatting date and time values.
+ (Currently, this setting does nothing, but it may in the
+ future.) Acceptable values are system-dependent; see <xref
+ linkend="locale"> for more information. If this variable is
+ set to the empty string (which is the default) then the value
+ is inherited from the execution environment of the server in a
+ system-dependent way.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+
+ </sect2>
+ <sect2 id="runtime-config-client-other">
+ <title>Other Defaults</title>
+
+ <variablelist>
+
+ <varlistentry id="guc-explain-pretty-print" xreflabel="explain_pretty_print">
+ <term><varname>explain_pretty_print</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>explain_pretty_print</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Determines whether <command>EXPLAIN VERBOSE</> uses the
+ indented or non-indented format for displaying detailed
+ query-tree dumps. The default is <literal>on</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-dynamic-library-path" xreflabel="dynamic_library_path">
+ <term><varname>dynamic_library_path</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>dynamic_library_path</> configuration parameter</primary>
+ </indexterm>
+ <indexterm><primary>dynamic loading</></>
+ <listitem>
+ <para>
+ If a dynamically loadable module needs to be opened and the
+ file name specified in the <command>CREATE FUNCTION</command> or
+ <command>LOAD</command> command
+ does not have a directory component (i.e. the
+ name does not contain a slash), the system will search this
+ path for the required file.
+ </para>
+
+ <para>
+ The value for <varname>dynamic_library_path</varname> has to be a
+ list of absolute directory paths separated by colons (or semi-colons
+ on Windows). If a list element starts
+ with the special string <literal>$libdir</literal>, the
+ compiled-in <productname>PostgreSQL</productname> package
+ library directory is substituted for <literal>$libdir</literal>. This
+ is where the modules provided by the standard
+ <productname>PostgreSQL</productname> distribution are installed.
+ (Use <literal>pg_config --pkglibdir</literal> to find out the name of
+ this directory.) For example:
+<programlisting>
+dynamic_library_path = '/usr/local/lib/postgresql:/home/my_project/lib:$libdir'
+</programlisting>
+ or, in a Windows environment:
+<programlisting>
+dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
+</programlisting>
+ </para>
+
+ <para>
+ The default value for this parameter is
+ <literal>'$libdir'</literal>. If the value is set to an empty
+ string, the automatic path search is turned off.
+ </para>
+
+ <para>
+ This parameter can be changed at run time by superusers, but a
+ setting done that way will only persist until the end of the
+ client connection, so this method should be reserved for
+ development purposes. The recommended way to set this parameter
+ is in the <filename>postgresql.conf</filename> configuration
+ file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect2>
+ </sect1>
+
+ <sect1 id="runtime-config-locks">
+ <title>Lock Management</title>
+
+ <variablelist>
+
+ <varlistentry id="guc-deadlock-timeout" xreflabel="deadlock_timeout">
+ <indexterm>
+ <primary>deadlock</primary>
+ <secondary>timeout during</secondary>
+ </indexterm>
+ <indexterm>
+ <primary>timeout</primary>
+ <secondary>deadlock</secondary>
+ </indexterm>
+ <indexterm>
+ <primary><varname>deadlock_timeout</> configuration parameter</primary>
+ </indexterm>
+
+ <term><varname>deadlock_timeout</varname> (<type>integer</type>)</term>
+ <listitem>
+ <para>
+ This is the amount of time, in milliseconds, to wait on a lock
+ before checking to see if there is a deadlock condition. The
+ check for deadlock is relatively slow, so the server doesn't run
+ it every time it waits for a lock. We (optimistically?) assume
+ that deadlocks are not common in production applications and
+ just wait on the lock for a while before starting the check for a
+ deadlock. Increasing this value reduces the amount of time
+ wasted in needless deadlock checks, but slows down reporting of
+ real deadlock errors. The default is 1000 (i.e., one second),
+ which is probably about the smallest value you would want in
+ practice. On a heavily loaded server you might want to raise it.
+ Ideally the setting should exceed your typical transaction time,
+ so as to improve the odds that a lock will be released before
+ the waiter decides to check for deadlock.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-max-locks-per-transaction" xreflabel="max_locks_per_transaction">
+ <term><varname>max_locks_per_transaction</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>max_locks_per_transaction</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ The shared lock table is created with room to describe locks on
+ <varname>max_locks_per_transaction</varname> *
+ (<xref linkend="guc-max-connections"> +
+ <xref linkend="guc-max-prepared-transactions">) objects;
+ hence, no more than this many distinct objects can
+ be locked at any one time. (Thus, this parameter's name may be
+ confusing: it is not a hard limit on the number of locks taken
+ by any one transaction, but rather a maximum average value.)
+ The default, 64, has historically
+ proven sufficient, but you might need to raise this value if you
+ have clients that touch many different tables in a single
+ transaction. This option can only be set at server start.
+ </para>
+
+ <para>
+ Increasing this parameter may cause <productname>PostgreSQL</>
+ to request more <systemitem class="osname">System V</> shared
+ memory than your operating system's default configuration
+ allows. See <xref linkend="sysvipc"> for information on how to
+ adjust those parameters, if necessary.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect1>
+
+ <sect1 id="runtime-config-compatible">
+ <title>Version and Platform Compatibility</title>
+
+ <sect2 id="runtime-config-compatible-version">
+ <title>Previous PostgreSQL Versions</title>
+ <variablelist>
+
+ <varlistentry id="guc-add-missing-from" xreflabel="add_missing_from">
+ <term><varname>add_missing_from</varname> (<type>boolean</type>)</term>
+ <indexterm><primary>FROM</><secondary>missing</></>
+ <indexterm>
+ <primary><varname>add_missing_from</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ When on, tables that are referenced by a query will be
+ automatically added to the <literal>FROM</> clause if not
+ already present. This behavior does not comply with the SQL
+ standard and many people dislike it because it can mask mistakes
+ (such as referencing a table where you should have referenced
+ its alias). The default is <literal>off</>. This variable can be
+ enabled for compatibility with releases of
+ <productname>PostgreSQL</> prior to 8.1, where this behavior was
+ allowed by default.
+ </para>
+
+ <para>
+ Note that even when this variable is enabled, a warning
+ message will be emitted for each implicit <literal>FROM</>
+ entry referenced by a query. Users are encouraged to update
+ their applications to not rely on this behavior, by adding all
+ tables referenced by a query to the query's <literal>FROM</>
+ clause (or its <literal>USING</> clause in the case of
+ <command>DELETE</>).
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-regex-flavor" xreflabel="regex_flavor">
+ <term><varname>regex_flavor</varname> (<type>string</type>)</term>
+ <indexterm><primary>regular expressions</></>
+ <indexterm>
+ <primary><varname>regex_flavor</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ The regular expression <quote>flavor</> can be set to
+ <literal>advanced</>, <literal>extended</>, or <literal>basic</>.
+ The default is <literal>advanced</>. The <literal>extended</>
+ setting may be useful for exact backwards compatibility with
+ pre-7.4 releases of <productname>PostgreSQL</>. See
+ <xref linkend="posix-syntax-details"> for details.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-sql-inheritance" xreflabel="sql_inheritance">
+ <term><varname>sql_inheritance</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>sql_inheritance</> configuration parameter</primary>
+ </indexterm>
+ <indexterm><primary>inheritance</></>
+ <listitem>
+ <para>
+ This controls the inheritance semantics, in particular whether
+ subtables are included by various commands by default. They were
+ not included in versions prior to 7.1. If you need the old
+ behavior you can set this variable to <literal>off</>, but in
+ the long run you are encouraged to change your applications to
+ use the <literal>ONLY</literal> key word to exclude subtables.
+ See <xref linkend="ddl-inherit"> for more information about
+ inheritance.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-default-with-oids" xreflabel="default_with_oids">
+ <term><varname>default_with_oids</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>default_with_oids</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ This controls whether <command>CREATE TABLE</command> and
+ <command>CREATE TABLE AS</command> include an OID column in
+ newly-created tables, if neither <literal>WITH OIDS</literal>
+ nor <literal>WITHOUT OIDS</literal> is specified. It also
+ determines whether OIDs will be included in tables created by
+ <command>SELECT INTO</command>. In <productname>PostgreSQL</>
+ 8.1 <varname>default_with_oids</> is disabled by default; in
+ prior versions of PostgreSQL, it was on by default.
+ </para>
+
+ <para>
+ The use of OIDs in user tables is considered deprecated, so
+ most installations should leave this variable disabled.
+ Applications that require OIDs for a particular table should
+ specify <literal>WITH OIDS</literal> when creating the
+ table. This variable can be enabled for compatibility with old
+ applications that do not follow this behavior.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-escape-string-warning" xreflabel="escape_string_warning">
+ <term><varname>escape_string_warning</varname> (<type>boolean</type>)</term>
+ <indexterm><primary>strings</><secondary>escape</></>
+ <indexterm>
+ <primary><varname>escape_string_warning</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ When on, a warning is issued if a backslash (<literal>\</>)
+ appears in an ordinary string literal (<literal>'...'</>
+ syntax). The default is <literal>off</>.
+ </para>
+ <para>
+ Escape string syntax (<literal>E'...'</>) should be used for
+ escapes, because in future versions of
+ <productname>PostgreSQL</productname> ordinary strings will have
+ the standard-conforming behavior of treating backslashes
+ literally.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect2>
+ <sect2 id="runtime-config-compatible-clients">
+ <title>Platform and Client Compatibility</title>
+ <variablelist>
+
+ <varlistentry id="guc-transform-null-equals" xreflabel="transform_null_equals">
+ <term><varname>transform_null_equals</varname> (<type>boolean</type>)</term>
+ <indexterm><primary>IS NULL</></>
+ <indexterm>
+ <primary><varname>transform_null_equals</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ When on, expressions of the form <literal><replaceable>expr</> =
+ NULL</literal> (or <literal>NULL =
+ <replaceable>expr</></literal>) are treated as
+ <literal><replaceable>expr</> IS NULL</literal>, that is, they
+ return true if <replaceable>expr</> evaluates to the null value,
+ and false otherwise. The correct SQL-spec-compliant behavior of
+ <literal><replaceable>expr</> = NULL</literal> is to always
+ return null (unknown). Therefore this option defaults to
+ <literal>off</>.
+ </para>
+
+ <para>
+ However, filtered forms in <productname>Microsoft
+ Access</productname> generate queries that appear to use
+ <literal><replaceable>expr</> = NULL</literal> to test for
+ null values, so if you use that interface to access the database you
+ might want to turn this option on. Since expressions of the
+ form <literal><replaceable>expr</> = NULL</literal> always
+ return the null value (using the correct interpretation) they are not
+ very useful and do not appear often in normal applications, so
+ this option does little harm in practice. But new users are
+ frequently confused about the semantics of expressions
+ involving null values, so this option is not on by default.
+ </para>
+
+ <para>
+ Note that this option only affects the exact form <literal>= NULL</>,
+ not other comparison operators or other expressions
+ that are computationally equivalent to some expression
+ involving the equals operator (such as <literal>IN</literal>).
+ Thus, this option is not a general fix for bad programming.
+ </para>
+
+ <para>
+ Refer to <xref linkend="functions-comparison"> for related information.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect2>
+ </sect1>
+
+ <sect1 id="runtime-config-preset">
+ <title>Preset Options</title>
+
+ <para>
+ The following <quote>parameters</> are read-only, and are determined
+ when <productname>PostgreSQL</productname> is compiled or when it is
+ installed. As such, they have been excluded from the sample
+ <filename>postgresql.conf</> file. These options report
+ various aspects of <productname>PostgreSQL</productname> behavior
+ that may be of interest to certain applications, particularly
+ administrative front-ends.
+ </para>
+
+ <variablelist>
+
+ <varlistentry id="guc-block-size" xreflabel="block_size">
+ <term><varname>block_size</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>block_size</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Reports the size of a disk block. It is determined by the value
+ of <literal>BLCKSZ</> when building the server. The default
+ value is 8192 bytes. The meaning of some configuration
+ variables (such as <xref linkend="guc-shared-buffers">) is
+ influenced by <varname>block_size</varname>. See <xref
+ linkend="runtime-config-resource"> for information.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-integer-datetimes" xreflabel="integer_datetimes">
+ <term><varname>integer_datetimes</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>integer_datetimes</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Reports whether <productname>PostgreSQL</productname> was built
+ with support for 64-bit-integer dates and times. It is set by
+ configuring with <literal>--enable-integer-datetimes</literal>
+ when building <productname>PostgreSQL</productname>. The
+ default value is <literal>off</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-lc-collate" xreflabel="lc_collate">
+ <term><varname>lc_collate</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>lc_collate</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Reports the locale in which sorting of textual data is done.
+ See <xref linkend="locale"> for more information.
+ The value is determined when the database cluster is initialized.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-lc-ctype" xreflabel="lc_ctype">
+ <term><varname>lc_ctype</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>lc_ctype</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Reports the locale that determines character classifications.
+ See <xref linkend="locale"> for more information.
+ The value is determined when the database cluster is initialized.
+ Ordinarily this will be the same as <varname>lc_collate</varname>,
+ but for special applications it might be set differently.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-max-function-args" xreflabel="max_function_args">
+ <term><varname>max_function_args</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>max_function_args</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Reports the maximum number of function arguments. It is determined by
+ the value of <literal>FUNC_MAX_ARGS</> when building the server. The
+ default value is 100.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-max-identifier-length" xreflabel="max_identifier_length">
+ <term><varname>max_identifier_length</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>max_identifier_length</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Reports the maximum identifier length. It is determined as one
+ less than the value of <literal>NAMEDATALEN</> when building
+ the server. The default value of <literal>NAMEDATALEN</> is
+ 64; therefore the default
+ <varname>max_identifier_length</varname> is 63.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-max-index-keys" xreflabel="max_index_keys">
+ <term><varname>max_index_keys</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>max_index_keys</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Reports the maximum number of index keys. It is determined by
+ the value of <literal>INDEX_MAX_KEYS</> when building the server. The
+ default value is 32.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-server-encoding" xreflabel="server_encoding">
+ <term><varname>server_encoding</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>server_encoding</> configuration parameter</primary>
+ </indexterm>
+ <indexterm><primary>character set</></>
+ <listitem>
+ <para>
+ Reports the database encoding (character set).
+ It is determined when the database is created. Ordinarily,
+ clients need only be concerned with the value of <xref
+ linkend="guc-client-encoding">.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-server-version" xreflabel="server_version">
+ <term><varname>server_version</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>server_version</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Reports the version number of the server. It is determined by the
+ value of <literal>PG_VERSION</> when building the server.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-standard-conforming-strings" xreflabel="standard_conforming_strings">
+ <term><varname>standard_conforming_strings</varname> (<type>boolean</type>)</term>
+ <indexterm><primary>strings</><secondary>escape</></>
+ <indexterm>
+ <primary><varname>standard_conforming_strings</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Reports whether ordinary string literals
+ (<literal>'...'</>) treat backslashes literally, as specified in
+ the SQL standard. The value is currently always <literal>off</>,
+ indicating that backslashes are treated as escapes. It is planned
+ that this will change to <literal>on</> in a future
+ <productname>PostgreSQL</productname> release when string literal
+ syntax changes to meet the standard. Applications may check this
+ parameter to determine how string literals will be processed.
+ The presence of this parameter can also be taken as an indication
+ that the escape string syntax (<literal>E'...'</>) is supported.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect1>
+
+ <sect1 id="runtime-config-custom">
+ <title>Customized Options</title>
+
+ <para>
+ This feature was designed to allow options not normally known to
+ <productname>PostgreSQL</productname> to be added by add-on modules
+ (such as procedural languages). This allows add-on modules to be
+ configured in the standard ways.
+ </para>
+
+ <variablelist>
+
+ <varlistentry id="guc-custom-variable-classes" xreflabel="custom_variable_classes">
+ <term><varname>custom_variable_classes</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>custom_variable_classes</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ This variable specifies one or several class names to be used for
+ custom variables, in the form of a comma-separated list. A custom
+ variable is a variable not normally known
+ to <productname>PostgreSQL</productname> proper but used by some
+ add-on module. Such variables must have names consisting of a class
+ name, a dot, and a variable name. <varname>custom_variable_classes</>
+ specifies all the class names in use in a particular installation.
+ This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> configuration file.
+ </para>
+
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>
+ The difficulty with setting custom variables in
+ <filename>postgresql.conf</> is that the file must be read before add-on
+ modules have been loaded, and so custom variables would ordinarily be
+ rejected as unknown. When <varname>custom_variable_classes</> is set,
+ the server will accept definitions of arbitrary variables within each
+ specified class. These variables will be treated as placeholders and
+ will have no function until the module that defines them is loaded. When a
+ module for a specific class is loaded, it will add the proper variable
+ definitions for its class name, convert any placeholder
+ values according to those definitions, and issue warnings for any
+ placeholders of its class that remain (which presumably would be
+ misspelled configuration variables).
+ </para>
+
+ <para>
+ Here is an example of what <filename>postgresql.conf</> might contain
+ when using custom variables:
+
+<programlisting>
+custom_variable_classes = 'plr,plperl'
+plr.path = '/usr/lib/R'
+plperl.use_strict = true
+plruby.use_strict = true # generates error: unknown class name
+</programlisting>
+ </para>
+ </sect1>
+
+ <sect1 id="runtime-config-developer">
+ <title>Developer Options</title>
+
+ <para>
+ The following options are intended for work on the
+ <productname>PostgreSQL</productname> 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>
+ <varlistentry id="guc-debug-assertions" xreflabel="debug_assertions">
+ <term><varname>debug_assertions</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>debug_assertions</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Turns on various assertion checks. This is a debugging aid. If
+ you are experiencing strange problems or crashes you might want
+ to turn this on, as it might expose programming mistakes. To use
+ this option, the macro <symbol>USE_ASSERT_CHECKING</symbol>
+ must be defined when <productname>PostgreSQL</productname> is
+ built (accomplished by the <command>configure</command> option
+ <option>--enable-cassert</option>). Note that
+ <varname>debug_assertions</varname> defaults to <literal>on</>
+ if <productname>PostgreSQL</productname> has been built with
+ assertions enabled.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-pre-auth-delay" xreflabel="pre_auth_delay">
+ <term><varname>pre_auth_delay</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>pre_auth_delay</> configuration parameter</primary>
+ </indexterm>
+ <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 id="guc-trace-notify" xreflabel="trace_notify">
+ <term><varname>trace_notify</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>trace_notify</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Generates a great amount of debugging output for the
+ <command>LISTEN</command> and <command>NOTIFY</command>
+ commands. <xref linkend="guc-client-min-messages"> or
+ <xref linkend="guc-log-min-messages"> 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>log_btree_build_stats</varname> (<type>boolean</type>)</term>
+ <listitem>
+ <para>
+ Various other code tracing and debugging options.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-wal-debug" xreflabel="wal_debug">
+ <term><varname>wal_debug</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>wal_debug</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ If on, emit WAL-related debugging output. This option is
+ only available if the <symbol>WAL_DEBUG</symbol> macro was
+ defined when <productname>PostgreSQL</productname> was
+ compiled.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-zero-damaged-pages" xreflabel="zero_damaged_pages">
+ <term><varname>zero_damaged_pages</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>zero_damaged_pages</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Detection of a damaged page header normally causes
+ <productname>PostgreSQL</> to report an error, aborting the current
+ command. Setting <varname>zero_damaged_pages</> to on causes
+ the system to instead report a warning, zero out the damaged page,
+ and continue processing. This behavior <emphasis>will destroy data</>,
+ namely all the rows on the damaged page. But it allows you to get
+ past the error and retrieve rows from any undamaged pages that may
+ be present in the table. So it is useful for recovering data if
+ corruption has occurred due to hardware or software error. You should
+ generally not set this on until you have given up hope of recovering
+ data from the damaged page(s) of a table. The
+ default setting is <literal>off</>, and it can only be changed
+ by a superuser.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect1>
+ <sect1 id="runtime-config-short">
+ <title>Short Options</title>
+
+ <para>
+ For convenience there are also single letter command-line option switches
+ available for some parameters. They are described in <xref
+ linkend="runtime-config-short-table">.
+ </para>
+
+ <table id="runtime-config-short-table">
+ <title>Short option key</title>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>Short option</entry>
+ <entry>Equivalent</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry><option>-B <replaceable>x</replaceable></option></entry>
+ <entry><literal>shared_buffers = <replaceable>x</replaceable></></entry>
+ </row>
+ <row>
+ <entry><option>-d <replaceable>x</replaceable></option></entry>
+ <entry><literal>log_min_messages = DEBUG<replaceable>x</replaceable></></entry>
+ </row>
+ <row>
+ <entry><option>-F</option></entry>
+ <entry><literal>fsync = off</></entry>
+ </row>
+ <row>
+ <entry><option>-h <replaceable>x</replaceable></option></entry>
+ <entry><literal>listen_addresses = <replaceable>x</replaceable></></entry>
+ </row>
+ <row>
+ <entry><option>-i</option></entry>
+ <entry><literal>listen_addresses = '*'</></entry>
+ </row>
+ <row>
+ <entry><option>-k <replaceable>x</replaceable></option></entry>
+ <entry><literal>unix_socket_directory = <replaceable>x</replaceable></></entry>
+ </row>
+ <row>
+ <entry><option>-l</option></entry>
+ <entry><literal>ssl = on</></entry>
+ </row>
+ <row>
+ <entry><option>-N <replaceable>x</replaceable></option></entry>
+ <entry><literal>max_connections = <replaceable>x</replaceable></></entry>
+ </row>
+ <row>
+ <entry><option>-p <replaceable>x</replaceable></option></entry>
+ <entry><literal>port = <replaceable>x</replaceable></></entry>
+ </row>
+
+ <row>
+ <entry>
+ <option>-fb</option>, <option>-fh</option>, <option>-fi</option>,
+ <option>-fm</option>, <option>-fn</option>,
+ <option>-fs</option>, <option>-ft</option><footnote
+ id="fn.runtime-config-short">
+ <para>
+ For historical reasons, these options must be passed to
+ the individual server process via the <option>-o</option>
+ <command>postmaster</command> option, for example,
+<screen>
+$ <userinput>postmaster -o '-S 1024 -s'</userinput>
+</screen>
+ or via <envar>PGOPTIONS</envar> from the client side, as
+ explained above.
+ </para>
+ </footnote>
+ </entry>
+ <entry>
+ <literal>enable_bitmapscan = off</>,
+ <literal>enable_hashjoin = off</>,
+ <literal>enable_indexscan = off</>,
+ <literal>enable_mergejoin = off</>,
+ <literal>enable_nestloop = off</>,
+ <literal>enable_seqscan = off</>,
+ <literal>enable_tidscan = off</>
+ </entry>
+ </row>
+
+ <row>
+ <entry><option>-s</option><footnoteref linkend="fn.runtime-config-short"></entry>
+ <entry><literal>log_statement_stats = on</></entry>
+ </row>
+
+ <row>
+ <entry><option>-S <replaceable>x</replaceable></option><footnoteref linkend="fn.runtime-config-short">
+ </entry>
+ <entry><literal>work_mem = <replaceable>x</replaceable></></entry>
+ </row>
+
+ <row>
+ <entry><option>-tpa</option>, <option>-tpl</option>, <option>-te</option><footnoteref linkend="fn.runtime-config-short"></entry>
+ <entry><literal>log_parser_stats = on</>,
+ <literal>log_planner_stats = on</>,
+ <literal>log_executor_stats = on</></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ </sect1>
+</chapter>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode:sgml
+sgml-omittag:nil
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:"./reference.ced"
+sgml-exposed-tags:nil
+sgml-local-catalogs:("/usr/lib/sgml/catalog")
+sgml-local-ecat-files:nil
+End:
+-->
-<!-- $PostgreSQL: pgsql/doc/src/sgml/filelist.sgml,v 1.43 2005/02/27 00:49:28 momjian Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/filelist.sgml,v 1.44 2005/09/12 22:11:38 neilc Exp $ -->
<!entity history SYSTEM "history.sgml">
<!entity info SYSTEM "info.sgml">
<!entity monitoring SYSTEM "monitoring.sgml">
<!entity regress SYSTEM "regress.sgml">
<!entity runtime SYSTEM "runtime.sgml">
+<!entity config SYSTEM "config.sgml">
<!entity user-manag SYSTEM "user-manag.sgml">
<!entity wal SYSTEM "wal.sgml">
<!--
-$PostgreSQL: pgsql/doc/src/sgml/postgres.sgml,v 1.75 2005/02/27 00:49:28 momjian Exp $
+$PostgreSQL: pgsql/doc/src/sgml/postgres.sgml,v 1.76 2005/09/12 22:11:38 neilc Exp $
-->
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.2//EN" [
&installation;
&installw;
&runtime;
+ &config;
&user-manag;
&manage-ag;
&client-auth;
<!--
-$PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.352 2005/08/30 15:48:28 tgl Exp $
+$PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.353 2005/09/12 22:11:38 neilc Exp $
-->
<chapter Id="runtime">
</sect2>
</sect1>
- <sect1 id="runtime-config">
- <title>Run-time Configuration</title>
-
- <indexterm>
- <primary>configuration</primary>
- <secondary>of the server</secondary>
- </indexterm>
-
- <para>
- There are a lot of configuration parameters that affect the
- behavior of the database system. In this subsection, we describe
- how to set configuration parameters; the following subsections
- discuss each parameter in detail.
- </para>
-
- <para>
- All parameter names are case-insensitive. Every parameter takes a
- value of one of four types: boolean, integer, floating point,
- or string. Boolean values may 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>
-
- <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. (<command>initdb</>
- installs a default copy there.) An example of what this file might look
- like is:
-<programlisting>
-# This is a comment
-log_connections = yes
-log_destination = 'syslog'
-search_path = '$user, public'
-</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>) introduce comments
- anywhere. Parameter values that are not simple identifiers or
- numbers must be single-quoted.
- </para>
-
- <para>
- <indexterm>
- <primary>SIGHUP</primary>
- </indexterm>
- The configuration file is reread whenever the
- <command>postmaster</command> process receives a
- <systemitem>SIGHUP</> signal (which is most easily sent by means
- of <literal>pg_ctl reload</>). The <command>postmaster</command>
- 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.
- </para>
-
- <para>
- A second way to set these configuration parameters is to give them
- as a command line option to the <command>postmaster</command>, such as:
-<programlisting>
-postmaster -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 may be convenient, it can cost you flexibility later.
- </para>
-
- <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:
-<programlisting>
-env PGOPTIONS='-c geqo=off' psql
-</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>
- Furthermore, it is possible to assign a set of option 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-alteruser" endterm="sql-alteruser-title">
- and <xref linkend="sql-alterdatabase" endterm="sql-alterdatabase-title">,
- respectively, are used to configure these settings. Per-database
- settings override anything received from the
- <command>postmaster</command> command-line or the configuration
- file, and in turn are overridden by per-user settings; both are
- overridden by per-session options.
- </para>
-
- <para>
- Some parameters can be changed in individual <acronym>SQL</acronym>
- sessions with the <xref linkend="SQL-SET" endterm="SQL-SET-title">
- 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 reasonably be changed without restarting
- <productname>PostgreSQL</productname>. Also, some parameters can
- be modified via <command>SET</command> or <command>ALTER</> by superusers,
- but not by ordinary users.
- </para>
-
- <para>
- The <xref linkend="SQL-SHOW" endterm="SQL-SHOW-title">
- command allows inspection of the current values of all parameters.
- </para>
-
- <para>
- The virtual table <structname>pg_settings</structname>
- (described in <xref linkend="view-pg-settings">) also allows
- displaying and updating session run-time parameters. It 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.
- </para>
-
- <sect2 id="runtime-config-file-locations">
- <title>File Locations</title>
-
- <para>
- In addition to the <filename>postgresql.conf</filename> file
- already mentioned, <productname>PostgreSQL</productname> uses
- two other manually-edited configuration files, which control
- client authentication (their use is discussed in <xref
- linkend="client-authentication">).
- By default, all three configuration files are stored
- in the database cluster's data directory. The options described
- in this subsection allow the configuration files to be placed elsewhere.
- (Doing so can ease administration. In particular it is often
- easier to ensure that the configuration files are properly backed-up
- when they are kept separate.)
- </para>
-
- <variablelist>
- <varlistentry id="guc-data-directory" xreflabel="data_directory">
- <term><varname>data_directory</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>data_directory</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies the directory to use for data storage.
- This option can only be set at server start.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-config-file" xreflabel="config_file">
- <term><varname>config_file</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>config_file</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies the main server configuration file
- (customarily called <filename>postgresql.conf</>).
- This option can only be set on the postmaster command line.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-hba-file" xreflabel="hba_file">
- <term><varname>hba_file</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>hba_file</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies the configuration file for host-based authentication
- (customarily called <filename>pg_hba.conf</>).
- This option can only be set at server start.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-ident-file" xreflabel="ident_file">
- <term><varname>ident_file</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>ident_file</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies the configuration file for
- <application>ident</> authentication
- (customarily called <filename>pg_ident.conf</>).
- This option can only be set at server start.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-external-pid-file" xreflabel="external_pid_file">
- <term><varname>external_pid_file</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>external_pid_file</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies the name of an additional process-id (PID) file that the
- <application>postmaster</> should create for use by server
- administration programs.
- This option can only be set at server start.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- <para>
- In a default installation, none of the above options are set explicitly.
- Instead, the
- data directory is specified by the <option>-D</option> command-line
- option or the <envar>PGDATA</envar> environment variable, and the
- configuration files are all found within the data directory.
- </para>
-
- <para>
- If you wish to keep the configuration files elsewhere than the
- data directory, the postmaster's <option>-D</option>
- command-line option or <envar>PGDATA</envar> environment variable
- must point to the directory containing the configuration files,
- and the <varname>data_directory</> option must be set in
- <filename>postgresql.conf</filename> (or on the command line) to show
- where the data directory is actually located. Notice that
- <varname>data_directory</> overrides <option>-D</option> and
- <envar>PGDATA</envar> for the location
- of the data directory, but not for the location of the configuration
- files.
- </para>
-
- <para>
- If you wish, you can specify the configuration file names and locations
- individually using the options <varname>config_file</>,
- <varname>hba_file</> and/or <varname>ident_file</>.
- <varname>config_file</> can only be specified on the
- <command>postmaster</command> command line, but the others can be
- set within the main configuration file. If all three options plus
- <varname>data_directory</> are explicitly set, then it is not necessary
- to specify <option>-D</option> or <envar>PGDATA</envar>.
- </para>
-
- <para>
- When setting any of these options, a relative path will be interpreted
- with respect to the directory in which the <command>postmaster</command>
- is started.
- </para>
- </sect2>
-
- <sect2 id="runtime-config-connection">
- <title>Connections and Authentication</title>
-
- <sect3 id="runtime-config-connection-settings">
- <title>Connection Settings</title>
-
- <variablelist>
-
- <varlistentry id="guc-listen-addresses" xreflabel="listen_addresses">
- <term><varname>listen_addresses</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>listen_addresses</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies the TCP/IP address(es) on which the server is
- to listen for connections from client applications.
- The value takes the form of a comma-separated list of host names
- and/or numeric IP addresses. The special entry <literal>*</>
- corresponds to all available IP interfaces.
- If the list is empty, the server does not listen on any IP interface
- at all, in which case only Unix-domain sockets can be used to connect
- to it.
- The default value is <systemitem class="systemname">localhost</>,
- which allows only local <quote>loopback</> connections to be made.
- This parameter can only be set at server start.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-port" xreflabel="port">
- <term><varname>port</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>port</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- The TCP port the server listens on; 5432 by default. Note that the
- same port number is used for all IP addresses the server listens on.
- This parameter can only be set at server start.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-max-connections" xreflabel="max_connections">
- <term><varname>max_connections</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>max_connections</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Determines the maximum number of concurrent connections to the
- database server. The default is typically 100, but may be less
- if your kernel settings will not support it (as determined
- during <application>initdb</>). This parameter can only be
- set at server start.
- </para>
-
- <para>
- Increasing this parameter may cause <productname>PostgreSQL</>
- to request more <systemitem class="osname">System V</> shared
- memory or semaphores than your operating system's default configuration
- allows. See <xref linkend="sysvipc"> for information on how to
- adjust those parameters, if necessary.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-superuser-reserved-connections"
- xreflabel="superuser_reserved_connections">
- <term><varname>superuser_reserved_connections</varname>
- (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>superuser_reserved_connections</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Determines the number of connection <quote>slots</quote> that
- are reserved for connections by <productname>PostgreSQL</>
- superusers. At most <xref linkend="guc-max-connections">
- connections can ever be active simultaneously. Whenever the
- number of active concurrent connections is at least
- <varname>max_connections</> minus
- <varname>superuser_reserved_connections</varname>, new
- connections will be accepted only for superusers.
- </para>
-
- <para>
- The default value is 2. The value must be less than the value of
- <varname>max_connections</varname>. This parameter can only be
- set at server start.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-unix-socket-directory" xreflabel="unix_socket_directory">
- <term><varname>unix_socket_directory</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>unix_socket_directory</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies the directory of the Unix-domain socket on which the
- server is to listen for
- connections from client applications. The default is normally
- <filename>/tmp</filename>, but can be changed at build time.
- This parameter can only be set at server start.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-unix-socket-group" xreflabel="unix_socket_group">
- <term><varname>unix_socket_group</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>unix_socket_group</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Sets the owning group of the Unix-domain socket. (The owning
- user of the socket is always the user that starts the
- server.) In combination with the option
- <varname>unix_socket_permissions</varname> this can be used as
- an additional access control mechanism for Unix-domain connections.
- By default this is the empty string, which uses the default
- group for the current user. This option can only be set at
- server start.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-unix-socket-permissions" xreflabel="unix_socket_permissions">
- <term><varname>unix_socket_permissions</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>unix_socket_permissions</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Sets the access permissions of the Unix-domain socket. Unix-domain
- sockets use the usual Unix file system permission set.
- The option value is expected to be a numeric mode
- specification in the form accepted by the
- <function>chmod</function> and <function>umask</function>
- system calls. (To use the customary octal format the number
- must start with a <literal>0</literal> (zero).)
- </para>
-
- <para>
- The default permissions are <literal>0777</literal>, meaning
- anyone can connect. Reasonable alternatives are
- <literal>0770</literal> (only user and group, see also
- <varname>unix_socket_group</varname>) and <literal>0700</literal>
- (only user). (Note that for a Unix-domain socket, only write
- permission matters and so there is no point in setting or revoking
- read or execute permissions.)
- </para>
-
- <para>
- This access control mechanism is independent of the one
- described in <xref linkend="client-authentication">.
- </para>
-
- <para>
- This option can only be set at server start.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-bonjour-name" xreflabel="bonjour_name">
- <term><varname>bonjour_name</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>bonjour_name</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies the <productname>Bonjour</productname> broadcast
- name. By default, the computer name is used, specified as an
- empty string ''. This option is ignored if the server was not
- compiled with <productname>Bonjour</productname> support. This
- option can only be set at server start.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-tcp-keepalives-idle" xreflabel="tcp_keepalives_idle">
- <term><varname>tcp_keepalives_idle</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>tcp_keepalives_idle</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- On systems that support the TCP_KEEPIDLE socket option, specifies the
- number of seconds between sending keepalives on an otherwise idle
- connection. A value of 0 uses the system default. If TCP_KEEPIDLE is
- not supported, this parameter must be 0. This option is ignored for
- connections made via a Unix-domain socket.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-tcp-keepalives-interval" xreflabel="tcp_keepalives_interval">
- <term><varname>tcp_keepalives_interval</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>tcp_keepalives_interval</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- On systems that support the TCP_KEEPINTVL socket option, specifies how
- long, in seconds, to wait for a response to a keepalive before
- retransmitting. A value of 0 uses the system default. If TCP_KEEPINTVL
- is not supported, this parameter must be 0. This option is ignored
- for connections made via a Unix-domain socket.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-tcp-keepalives-count" xreflabel="tcp_keepalives_count">
- <term><varname>tcp_keepalives_count</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>tcp_keepalives_count</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- On systems that support the TCP_KEEPCNT socket option, specifies how
- many keepalives may be lost before the connection is considered dead.
- A value of 0 uses the system default. If TCP_KEEPINTVL is not
- supported, this parameter must be 0.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </sect3>
- <sect3 id="runtime-config-connection-security">
- <title>Security and Authentication</title>
-
- <variablelist>
- <varlistentry id="guc-authentication-timeout" xreflabel="authentication_timeout">
- <term><varname>authentication_timeout</varname> (<type>integer</type>)</term>
- <indexterm><primary>timeout</><secondary>client authentication</></indexterm>
- <indexterm><primary>client authentication</><secondary>timeout during</></indexterm>
- <indexterm>
- <primary><varname>authentication_timeout</> configuration parameter</primary>
- </indexterm>
-
- <listitem>
- <para>
- Maximum time to complete client authentication, in seconds. If a
- would-be client has not completed the authentication protocol in
- this much time, the server breaks the connection. This prevents
- hung clients from occupying a connection indefinitely. This
- option can only be set at server start or in the
- <filename>postgresql.conf</filename> file. The default is 60.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-ssl" xreflabel="ssl">
- <term><varname>ssl</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>ssl</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Enables <acronym>SSL</> connections. Please read
- <xref linkend="ssl-tcp"> before using this. The default
- is <literal>off</>. This parameter can only be set at server
- start.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-password-encryption" xreflabel="password_encryption">
- <term><varname>password_encryption</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>password_encryption</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- When a password is specified in <xref
- linkend="sql-createuser" endterm="sql-createuser-title"> or
- <xref linkend="sql-alteruser" endterm="sql-alteruser-title">
- without writing either <literal>ENCRYPTED</> or
- <literal>UNENCRYPTED</>, this option determines whether the
- password is to be encrypted. The default is <literal>on</>
- (encrypt the password).
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-krb-server-keyfile" xreflabel="krb_server_keyfile">
- <term><varname>krb_server_keyfile</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>krb_server_keyfile</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Sets the location of the Kerberos server key file. See
- <xref linkend="kerberos-auth"> for details. This parameter
- can only be set at server start.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-krb-srvname" xreflabel="krb_srvname">
- <term><varname>krb_srvname</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>krb_srvname</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Sets the Kerberos service name. See <xref linkend="kerberos-auth">
- for details. This parameter can only be set at server start.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-krb-server-hostname" xreflabel="krb_server_hostname">
- <term><varname>krb_server_hostname</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>krb_server_hostname</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Sets the hostname part of the service principal.
- This, combined with <varname>krb_srvname</>, is used to generate
- the complete service principal, i.e.
- <varname>krb_server_hostname</><literal>/</><varname>krb_server_hostname</><literal>@</>REALM.
- </para>
- <para>
- If not set, the default is to allow any service principal matching an entry
- in the keytab. See <xref linkend="kerberos-auth"> for details.
- This parameter can only be set at server start.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-krb-caseins-users" xreflabel="krb_caseins_users">
- <term><varname>krb_caseins_users</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>krb_caseins_users</varname> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Sets if Kerberos usernames should be treated case-insensitively.
- The default is <literal>off</> (case sensitive). This parameter
- can only be set at server start.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-db-user-namespace" xreflabel="db_user_namespace">
- <term><varname>db_user_namespace</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>db_user_namespace</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- This enables per-database user names. It is off by default.
- </para>
-
- <para>
- If this is on, you should create users as <literal>username@dbname</>.
- When <literal>username</> is passed by a connecting client,
- <literal>@</> and the database name are appended to the user
- name and that database-specific user name is looked up by the
- server. Note that when you create users with names containing
- <literal>@</> within the SQL environment, you will need to
- quote the user name.
- </para>
-
- <para>
- With this option enabled, you can still create ordinary global
- users. Simply append <literal>@</> when specifying the user
- name in the client. The <literal>@</> will be stripped off
- before the user name is looked up by the server.
- </para>
-
- <note>
- <para>
- This feature is intended as a temporary measure until a
- complete solution is found. At that time, this option will
- be removed.
- </para>
- </note>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </sect3>
- </sect2>
-
- <sect2 id="runtime-config-resource">
- <title>Resource Consumption</title>
-
- <sect3 id="runtime-config-resource-memory">
- <title>Memory</title>
-
- <variablelist>
- <varlistentry id="guc-shared-buffers" xreflabel="shared_buffers">
- <term><varname>shared_buffers</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>shared_buffers</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Sets the number of shared memory buffers used by the database
- server. The default is typically 1000, but may be less if your
- kernel settings will not support it (as determined during
- <application>initdb</>). Each buffer is 8192 bytes, unless a
- different value of <symbol>BLCKSZ</symbol> was chosen when building
- the server. This setting must be at least 16, as well as at
- least twice the value of <xref linkend="guc-max-connections">;
- however, settings significantly higher than the minimum are
- usually needed for good performance. Values of a few thousand
- are recommended for production installations. This option can
- only be set at server start.
- </para>
-
- <para>
- Increasing this parameter may cause <productname>PostgreSQL</>
- to request more <systemitem class="osname">System V</> shared
- memory than your operating system's default configuration
- allows. See <xref linkend="sysvipc"> for information on how to
- adjust those parameters, if necessary.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-temp-buffers" xreflabel="temp_buffers">
- <term><varname>temp_buffers</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>temp_buffers</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Sets the maximum number of temporary buffers used by each database
- session. These are session-local buffers used only for access
- to temporary tables. The default is 1000. The setting can
- be changed within individual sessions, but only up until the
- first use of temporary tables within a session; subsequent
- attempts to change the value will have no effect on that session.
- </para>
-
- <para>
- A session will allocate temporary buffers as needed up to the limit
- given by <varname>temp_buffers</>. The cost of setting a large
- value in sessions that do not actually need a lot of temporary
- buffers is only a buffer descriptor, or about 64 bytes, per
- increment in <varname>temp_buffers</>. However if a buffer is
- actually used an additional 8192 bytes will be consumed for it
- (or in general, <symbol>BLCKSZ</symbol> bytes).
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-max-prepared-transactions" xreflabel="max_prepared_transactions">
- <term><varname>max_prepared_transactions</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>max_prepared_transactions</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Sets the maximum number of transactions that can be in the
- <quote>prepared</> state simultaneously (see <xref
- linkend="sql-prepare-transaction"
- endterm="sql-prepare-transaction-title">).
- Setting this parameter to zero disables the prepared-transaction
- feature.
- The default is 5.
- This option can only be set at server start.
- </para>
-
- <para>
- If you are not using prepared transactions, this parameter may as
- well be set to zero. If you are using them, you will probably
- want <varname>max_prepared_transactions</varname> to be at least
- as large as <xref linkend="guc-max-connections">, to avoid unwanted
- failures at the prepare step.
- </para>
-
- <para>
- Increasing this parameter may cause <productname>PostgreSQL</>
- to request more <systemitem class="osname">System V</> shared
- memory than your operating system's default configuration
- allows. See <xref linkend="sysvipc"> for information on how to
- adjust those parameters, if necessary.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-work-mem" xreflabel="work_mem">
- <term><varname>work_mem</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>work_mem</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies the amount of memory to be used by internal sort operations
- and hash tables before switching to temporary disk files. The value is
- specified in kilobytes, and defaults to 1024 kilobytes (1 MB).
- Note that for a complex query, several sort or hash operations might be
- running in parallel; each one will be allowed to use as much memory
- as this value specifies before it starts to put data into temporary
- files. Also, several running sessions could be doing such operations
- concurrently. So the total memory used could be many
- times the value of <varname>work_mem</varname>; it is necessary to
- keep this fact in mind when choosing the value. Sort operations are
- used for <literal>ORDER BY</>, <literal>DISTINCT</>, and
- merge joins.
- Hash tables are used in hash joins, hash-based aggregation, and
- hash-based processing of <literal>IN</> subqueries.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-maintenance-work-mem" xreflabel="maintenance_work_mem">
- <term><varname>maintenance_work_mem</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>maintenance_work_mem</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies the maximum amount of memory to be used in maintenance
- operations, such as <command>VACUUM</command>, <command>CREATE
- INDEX</>, and <command>ALTER TABLE ADD FOREIGN KEY</>.
- The value is specified in kilobytes, and defaults to 16384 kilobytes
- (16 MB). Since only one of these operations can be executed at
- a time by a database session, and an installation normally doesn't
- have very many of them happening concurrently, it's safe to set this
- value significantly larger than <varname>work_mem</varname>. Larger
- settings may improve performance for vacuuming and for restoring
- database dumps.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-max-stack-depth" xreflabel="max_stack_depth">
- <term><varname>max_stack_depth</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>max_stack_depth</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies the maximum safe depth of the server's execution stack.
- The ideal setting for this parameter is the actual stack size limit
- enforced by the kernel (as set by <literal>ulimit -s</> or local
- equivalent), less a safety margin of a megabyte or so. The safety
- margin is needed because the stack depth is not checked in every
- routine in the server, but only in key potentially-recursive routines
- such as expression evaluation. Setting the parameter higher than
- the actual kernel limit will mean that a runaway recursive function
- can crash an individual backend process. The default setting is
- 2048 KB (two megabytes), which is conservatively small and unlikely
- to risk crashes. However, it may be too small to allow execution
- of complex functions.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </sect3>
- <sect3 id="runtime-config-resource-fsm">
- <title>Free Space Map</title>
-
- <indexterm>
- <primary>free space map</primary>
- </indexterm>
-
- <para>
- These parameters control the size of the shared <firstterm>free space
- map</>, which tracks the locations of unused space in the database.
- An undersized free space map may cause the database to consume
- increasing amounts of disk space over time, because free space that
- is not in the map cannot be re-used; instead <productname>PostgreSQL</>
- will request more disk space from the operating system when it needs
- to store new data.
- The last few lines displayed by a database-wide <command>VACUUM VERBOSE</>
- command can help in determining if the current settings are adequate.
- A <literal>NOTICE</> message is also printed during such an operation
- if the current settings are too low.
- </para>
-
- <para>
- Increasing these parameters may cause <productname>PostgreSQL</>
- to request more <systemitem class="osname">System V</> shared
- memory than your operating system's default configuration
- allows. See <xref linkend="sysvipc"> for information on how to
- adjust those parameters, if necessary.
- </para>
-
- <variablelist>
- <varlistentry id="guc-max-fsm-pages" xreflabel="max_fsm_pages">
- <term><varname>max_fsm_pages</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>max_fsm_pages</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Sets the maximum number of disk pages for which free space will
- be tracked in the shared free-space map. Six bytes of shared memory
- are consumed for each page slot. This setting must be more than
- 16 * <varname>max_fsm_relations</varname>. The default is 20000.
- This option can only be set at server start.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-max-fsm-relations" xreflabel="max_fsm_relations">
- <term><varname>max_fsm_relations</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>max_fsm_relations</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Sets the maximum number of relations (tables and indexes) for which
- free space will be tracked in the shared free-space map. Roughly
- seventy bytes of shared memory are consumed for each slot.
- The default is 1000.
- This option can only be set at server start.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </sect3>
- <sect3 id="runtime-config-resource-kernel">
- <title>Kernel Resource Usage</title>
- <variablelist>
-
- <varlistentry id="guc-max-files-per-process" xreflabel="max_files_per_process">
- <term><varname>max_files_per_process</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>max_files_per_process</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Sets the maximum number of simultaneously open files allowed to each
- server subprocess. The default is 1000. If the kernel is enforcing
- a safe per-process limit, you don't need to worry about this setting.
- But on some platforms (notably, most BSD systems), the kernel will
- allow individual processes to open many more files than the system
- can really support when a large number of processes all try to open
- that many files. If you find yourself seeing <quote>Too many open
- files</> failures, try reducing this setting.
- This option can only be set at server start.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-preload-libraries" xreflabel="preload_libraries">
- <term><varname>preload_libraries</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>preload_libraries</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- This variable specifies one or more shared libraries that are
- to be preloaded at server start. A parameterless
- initialization function can optionally be called for each
- library. To specify that, add a colon and the name of the
- initialization function after the library name. For example
- <literal>'$libdir/mylib:mylib_init'</literal> would cause
- <literal>mylib</> to be preloaded and <literal>mylib_init</>
- to be executed. If more than one library is to be loaded,
- separate their names with commas.
- </para>
-
- <para>
- If a specified library or initialization function is not found,
- the server will fail to start.
- </para>
-
- <para>
- <productname>PostgreSQL</productname> procedural language
- libraries may be preloaded in this way, typically by using the
- syntax <literal>'$libdir/plXXX:plXXX_init'</literal> where
- <literal>XXX</literal> is <literal>pgsql</>, <literal>perl</>,
- <literal>tcl</>, or <literal>python</>.
- </para>
-
- <para>
- By preloading a shared library (and initializing it if
- applicable), the library startup time is avoided when the
- library is first used. However, the time to start each new
- server process may increase slightly, even if that process never
- uses the library. So this option is recommended only for
- libraries that will be used in most sessions.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </sect3>
-
- <sect3 id="runtime-config-resource-vacuum-cost">
- <title id="runtime-config-resource-vacuum-cost-title">
- Cost-Based Vacuum Delay
- </title>
-
- <para>
- During the execution of <xref linkend="sql-vacuum"
- endterm="sql-vacuum-title"> and <xref linkend="sql-analyze"
- endterm="sql-analyze-title"> commands, the system maintains an
- internal counter that keeps track of the estimated cost of the
- various I/O operations that are performed. When the accumulated
- cost reaches a limit (specified by
- <varname>vacuum_cost_limit</varname>), the process performing
- the operation will sleep for a while (specified by
- <varname>vacuum_cost_delay</varname>). Then it will reset the
- counter and continue execution.
- </para>
-
- <para>
- The intent of this feature is to allow administrators to reduce
- the I/O impact of these commands on concurrent database
- activity. There are many situations in which it is not very
- important that maintenance commands like
- <command>VACUUM</command> and <command>ANALYZE</command> finish
- quickly; however, it is usually very important that these
- commands do not significantly interfere with the ability of the
- system to perform other database operations. Cost-based vacuum
- delay provides a way for administrators to achieve this.
- </para>
-
- <para>
- This feature is disabled by default. To enable it, set the
- <varname>vacuum_cost_delay</varname> variable to a nonzero
- value.
- </para>
-
- <variablelist>
- <varlistentry id="guc-vacuum-cost-delay" xreflabel="vacuum_cost_delay">
- <term><varname>vacuum_cost_delay</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>vacuum_cost_delay</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- The length of time, in milliseconds, that the process will sleep
- when the cost limit has been exceeded.
- The default value is 0, which disables the cost-based vacuum
- delay feature. Positive values enable cost-based vacuuming.
- Note that on many systems, the effective resolution
- of sleep delays is 10 milliseconds; setting
- <varname>vacuum_cost_delay</varname> to a value that is
- not a multiple of 10 may have the same results as setting it
- to the next higher multiple of 10.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-vacuum-cost-page-hit" xreflabel="vacuum_cost_page_hit">
- <term><varname>vacuum_cost_page_hit</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>vacuum_cost_page_hit</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- The estimated cost for vacuuming a buffer found in the shared buffer
- cache. It represents the cost to lock the buffer pool, lookup
- the shared hash table and scan the content of the page. The
- default value is 1.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-vacuum-cost-page-miss" xreflabel="vacuum_cost_page_miss">
- <term><varname>vacuum_cost_page_miss</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>vacuum_cost_page_miss</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- The estimated cost for vacuuming a buffer that has to be read from
- disk. This represents the effort to lock the buffer pool,
- lookup the shared hash table, read the desired block in from
- the disk and scan its content. The default value is 10.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-vacuum-cost-page-dirty" xreflabel="vacuum_cost_page_dirty">
- <term><varname>vacuum_cost_page_dirty</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>vacuum_cost_page_dirty</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- The estimated cost charged when vacuum modifies a block that was
- previously clean. It represents the extra I/O required to
- flush the dirty block out to disk again. The default value is
- 20.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-vacuum-cost-limit" xreflabel="vacuum_cost_limit">
- <term><varname>vacuum_cost_limit</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>vacuum_cost_limit</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- The accumulated cost that will cause the vacuuming process to sleep.
- The default value is 200.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- <note>
- <para>
- There are certain operations that hold critical locks and should
- therefore complete as quickly as possible. Cost-based vacuum
- delays do not occur during such operations. Therefore it is
- possible that the cost accumulates far higher than the specified
- limit. To avoid uselessly long delays in such cases, the actual
- delay is calculated as <varname>vacuum_cost_delay</varname> *
- <varname>accumulated_balance</varname> /
- <varname>vacuum_cost_limit</varname> with a maximum of
- <varname>vacuum_cost_delay</varname> * 4.
- </para>
- </note>
-
- </sect3>
-
- <sect3 id="runtime-config-resource-background-writer">
- <title>Background Writer</title>
-
- <para>
- Beginning in <productname>PostgreSQL</> 8.0, there is a separate server
- process called the <firstterm>background writer</>, whose sole function
- is to issue writes of <quote>dirty</> shared buffers. The intent is
- that server processes handling user queries should seldom or never have
- to wait for a write to occur, because the background writer will do it.
- This arrangement also reduces the performance penalty associated with
- checkpoints. The background writer will continuously trickle out dirty
- pages to disk, so that only a few pages will need to be forced out when
- checkpoint time arrives, instead of the storm of dirty-buffer writes that
- formerly occurred at each checkpoint. However there is a net overall
- increase in I/O load, because where a repeatedly-dirtied page might
- before have been written only once per checkpoint interval, the
- background writer might write it several times in the same interval.
- In most situations a continuous low load is preferable to periodic
- spikes, but the parameters discussed in this section can be used to tune
- the behavior for local needs.
- </para>
-
- <variablelist>
- <varlistentry id="guc-bgwriter-delay" xreflabel="bgwriter_delay">
- <term><varname>bgwriter_delay</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>bgwriter_delay</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies the delay between activity rounds for the
- background writer. In each round the writer issues writes
- for some number of dirty buffers (controllable by the
- following parameters). It then sleeps for <varname>bgwriter_delay</>
- milliseconds, and repeats. The default value is 200. Note
- that on many systems, the effective resolution of sleep
- delays is 10 milliseconds; setting <varname>bgwriter_delay</>
- to a value that is not a multiple of 10 may have the same
- results as setting it to the next higher multiple of 10.
- This option can only be set at server start or in the
- <filename>postgresql.conf</filename> file.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-bgwriter-lru-percent" xreflabel="bgwriter_lru_percent">
- <term><varname>bgwriter_lru_percent</varname> (<type>floating point</type>)</term>
- <indexterm>
- <primary><varname>bgwriter_lru_percent</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- To reduce the probability that server processes will need to issue
- their own writes, the background writer tries to write buffers that
- are likely to be recycled soon. In each round, it examines up to
- <varname>bgwriter_lru_percent</> of the buffers that are nearest to
- being recycled, and writes any that are dirty.
- The default value is 1.0 (this is a percentage of the total number
- of shared buffers).
- This option can only be set at server start or in the
- <filename>postgresql.conf</filename> file.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-bgwriter-lru-maxpages" xreflabel="bgwriter_lru_maxpages">
- <term><varname>bgwriter_lru_maxpages</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>bgwriter_lru_maxpages</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- In each round, no more than this many buffers will be written
- as a result of scanning soon-to-be-recycled buffers.
- The default value is 5.
- This option can only be set at server start or in the
- <filename>postgresql.conf</filename> file.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-bgwriter-all-percent" xreflabel="bgwriter_all_percent">
- <term><varname>bgwriter_all_percent</varname> (<type>floating point</type>)</term>
- <indexterm>
- <primary><varname>bgwriter_all_percent</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- To reduce the amount of work that will be needed at checkpoint time,
- the background writer also does a circular scan through the entire
- buffer pool, writing buffers that are found to be dirty.
- In each round, it examines up to
- <varname>bgwriter_all_percent</> of the buffers for this purpose.
- The default value is 0.333 (this is a percentage of the total number
- of shared buffers). With the default <varname>bgwriter_delay</>
- setting, this will allow the entire shared buffer pool to be scanned
- about once per minute.
- This option can only be set at server start or in the
- <filename>postgresql.conf</filename> file.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-bgwriter-all-maxpages" xreflabel="bgwriter_all_maxpages">
- <term><varname>bgwriter_all_maxpages</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>bgwriter_all_maxpages</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- In each round, no more than this many buffers will be written
- as a result of the scan of the entire buffer pool. (If this
- limit is reached, the scan stops, and resumes at the next buffer
- during the next round.)
- The default value is 5.
- This option can only be set at server start or in the
- <filename>postgresql.conf</filename> file.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- <para>
- Smaller values of <varname>bgwriter_all_percent</varname> and
- <varname>bgwriter_all_maxpages</varname> reduce the extra I/O load
- caused by the background writer, but leave more work to be done
- at checkpoint time. To reduce load spikes at checkpoints,
- increase these two values.
- Similarly, smaller values of <varname>bgwriter_lru_percent</varname> and
- <varname>bgwriter_lru_maxpages</varname> reduce the extra I/O load
- caused by the background writer, but make it more likely that server
- processes will have to issue writes for themselves, delaying interactive
- queries.
- To disable background writing entirely,
- set both <varname>maxpages</varname> values and/or both
- <varname>percent</varname> values to zero.
- </para>
- </sect3>
-
- </sect2>
-
- <sect2 id="runtime-config-wal">
- <title>Write Ahead Log</title>
-
- <para>
- See also <xref linkend="wal-configuration"> for details on WAL
- tuning.
- </para>
-
- <sect3 id="runtime-config-wal-settings">
- <title>Settings</title>
- <variablelist>
-
- <varlistentry id="guc-fsync" xreflabel="fsync">
- <indexterm>
- <primary><varname>fsync</> configuration parameter</primary>
- </indexterm>
- <term><varname>fsync</varname> (<type>boolean</type>)</term>
- <listitem>
- <para>
- If this option is on, the <productname>PostgreSQL</> server
- will use the <function>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.
- </para>
-
- <para>
- However, using <function>fsync()</function> results in a
- performance penalty: when a transaction is committed,
- <productname>PostgreSQL</productname> must wait for the
- operating system to flush the write-ahead log to disk. When
- <varname>fsync</varname> is disabled, the operating system is
- allowed to do its best in buffering, ordering, and delaying
- writes. This can result in significantly improved performance.
- However, if the system crashes, the results of the last few
- committed transactions may be lost in part or whole. In the
- worst case, unrecoverable data corruption may occur.
- (Crashes of the database server itself are <emphasis>not</>
- a risk factor here. Only an operating-system-level crash
- creates a risk of corruption.)
- </para>
-
- <para>
- Due to the risks involved, there is no universally correct
- setting for <varname>fsync</varname>. Some administrators
- always disable <varname>fsync</varname>, while others only
- turn it off for bulk loads, where there is a clear restart
- point if something goes wrong, whereas some administrators
- always leave <varname>fsync</varname> enabled. The default is
- to enable <varname>fsync</varname>, for maximum reliability.
- If you trust your operating system, your hardware, and your
- utility company (or your battery backup), you can consider
- disabling <varname>fsync</varname>.
- </para>
-
- <para>
- This option can only be set at server start or in the
- <filename>postgresql.conf</filename> file. If this option
- is <literal>off</>, consider also turning off
- <varname>guc-full-page-writes</>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-wal-sync-method" xreflabel="wal_sync_method">
- <term><varname>wal_sync_method</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>wal_sync_method</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Method used for forcing WAL updates out to disk. Possible
- values are:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <literal>open_datasync</> (write WAL files with <function>open()</> option <symbol>O_DSYNC</>)
- </para>
- </listitem>
- <listitem>
- <para>
- <literal>fdatasync</> (call <function>fdatasync()</> at each commit),
- </para>
- </listitem>
- <listitem>
- <para>
- <literal>fsync</> (call <function>fsync()</> at each commit)
- </para>
- </listitem>
- <listitem>
- <para>
- <literal>fsync_writethrough</> (force write-through of any disk write cache)
- </para>
- </listitem>
- <listitem>
- <para>
- <literal>open_sync</> (write WAL files with <function>open()</> option <symbol>O_SYNC</>)
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Not all of these choices are available on all platforms.
- The top-most supported option is used as the default.
- If <varname>fsync</varname> is off then this setting is irrelevant.
- This option can only be set at server start or in the
- <filename>postgresql.conf</filename> file.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-full-page-writes" xreflabel="full_page_writes">
- <indexterm>
- <primary><varname>full_page_writes</> configuration parameter</primary>
- </indexterm>
- <term><varname>full_page_writes</varname> (<type>boolean</type>)</term>
- <listitem>
- <para>
- A page write in process during an operating system crash might
- be only partially written to disk, leading to an on-disk page
- that contains a mix of old and new data. During recovery, the
- row changes stored in WAL are not enough to completely restore
- the page.
- </para>
-
- <para>
- When this option is on, the <productname>PostgreSQL</> server
- writes full pages to WAL when they are first modified after a
- checkpoint so full recovery is possible. Turning this option off
- might lead to a corrupt system after an operating system crash
- or power failure because uncorrected partial pages might contain
- inconsistent or corrupt data. The risks are less but similar to
- <varname>fsync</>.
- </para>
-
- <para>
- This option can only be set at server start or in the
- <filename>postgresql.conf</filename> file. The default is
- <literal>on</>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-wal-buffers" xreflabel="wal_buffers">
- <term><varname>wal_buffers</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>wal_buffers</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Number of disk-page buffers allocated in shared memory for WAL data.
- The default is 8. The setting need only be large enough to hold
- the amount of WAL data generated by one typical transaction, since
- the data is flushed to disk at every transaction commit.
- This option can only be set at server start.
- </para>
-
- <para>
- Increasing this parameter may cause <productname>PostgreSQL</>
- to request more <systemitem class="osname">System V</> shared
- memory than your operating system's default configuration
- allows. See <xref linkend="sysvipc"> for information on how to
- adjust those parameters, if necessary.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-commit-delay" xreflabel="commit_delay">
- <term><varname>commit_delay</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>commit_delay</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Time delay between writing a commit record to the WAL buffer
- and flushing the buffer out to disk, in microseconds. A
- nonzero delay can allow multiple transactions to be committed
- with only one <function>fsync()</function> system call, if
- system load is high enough that additional transactions become
- ready to commit within the given interval. But the delay is
- just wasted if no other transactions become ready to
- commit. Therefore, the delay is only performed if at least
- <varname>commit_siblings</varname> other transactions are
- active at the instant that a server process has written its
- commit record. The default is zero (no delay).
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-commit-siblings" xreflabel="commit_siblings">
- <term><varname>commit_siblings</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>commit_siblings</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Minimum number of concurrent open transactions to require
- before performing the <varname>commit_delay</> delay. A larger
- value makes it more probable that at least one other
- transaction will become ready to commit during the delay
- interval. The default is five.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </sect3>
- <sect3 id="runtime-config-wal-checkpoints">
- <title>Checkpoints</title>
-
- <variablelist>
- <varlistentry id="guc-checkpoint-segments" xreflabel="checkpoint_segments">
- <term><varname>checkpoint_segments</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>checkpoint_segments</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Maximum distance between automatic WAL checkpoints, in log
- file segments (each segment is normally 16 megabytes). The
- default is three. This option can only be set at server start
- or in the <filename>postgresql.conf</filename> file.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-checkpoint-timeout" xreflabel="checkpoint_timeout">
- <term><varname>checkpoint_timeout</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>checkpoint_timeout</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Maximum time between automatic WAL checkpoints, in
- seconds. The default is 300 seconds. This option can only be
- set at server start or in the <filename>postgresql.conf</>
- file.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-checkpoint-warning" xreflabel="checkpoint_warning">
- <term><varname>checkpoint_warning</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>checkpoint_warning</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Write a message to the server log if checkpoints caused by
- the filling of checkpoint segment files happen closer together
- than this many seconds. The default is 30 seconds.
- Zero turns off the warning.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </sect3>
- <sect3 id="runtime-config-wal-archiving">
- <title>Archiving</title>
-
- <variablelist>
- <varlistentry id="guc-archive-command" xreflabel="archive_command">
- <term><varname>archive_command</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>archive_command</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- The shell command to execute to archive a completed segment of
- the WAL file series. If this is an empty string (the default),
- WAL archiving is disabled. Any <literal>%p</> in the string is
- replaced by the absolute path of the file to archive, and any
- <literal>%f</> is replaced by the file name only. Use
- <literal>%%</> to embed an actual <literal>%</> character in the
- command. For more information see <xref
- linkend="backup-archiving-wal">. This option can only be set at
- server start or in the <filename>postgresql.conf</filename>
- file.
- </para>
- <para>
- It is important for the command to return a zero exit status if
- and only if it succeeds. Examples:
-<programlisting>
-archive_command = 'cp "%p" /mnt/server/archivedir/"%f"'
-archive_command = 'copy "%p" /mnt/server/archivedir/"%f"' # Windows
-</programlisting>
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </sect3>
- </sect2>
-
- <sect2 id="runtime-config-query">
- <title>Query Planning</title>
-
- <sect3 id="runtime-config-query-enable">
- <title>Planner Method Configuration</title>
-
- <para>
- These configuration parameters provide a crude method of
- influencing the query plans chosen by the query optimizer. If
- the default plan chosen by the optimizer for a particular query
- is not optimal, a temporary solution may be found by using one
- of these configuration parameters to force the optimizer to
- choose a different plan. Turning one of these settings off
- permanently is seldom a good idea, however.
- Better ways to improve the quality of the
- plans chosen by the optimizer include adjusting the <xref
- linkend="runtime-config-query-constants"
- endterm="runtime-config-query-constants-title">, running <xref
- linkend="sql-analyze" endterm="sql-analyze-title"> more
- frequently, increasing the value of the <xref
- linkend="guc-default-statistics-target"> configuration parameter,
- and increasing the amount of statistics collected for
- specific columns using <command>ALTER TABLE SET
- STATISTICS</command>.
- </para>
-
- <variablelist>
- <varlistentry id="guc-enable-bitmapscan" xreflabel="enable_bitmapscan">
- <term><varname>enable_bitmapscan</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary>bitmap scan</primary>
- </indexterm>
- <indexterm>
- <primary><varname>enable_bitmapscan</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Enables or disables the query planner's use of bitmap-scan plan
- types. The default is <literal>on</>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-enable-hashagg" xreflabel="enable_hashagg">
- <term><varname>enable_hashagg</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>enable_hashagg</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Enables or disables the query planner's use of hashed
- aggregation plan types. The default is <literal>on</>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-enable-hashjoin" xreflabel="enable_hashjoin">
- <term><varname>enable_hashjoin</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>enable_hashjoin</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Enables or disables the query planner's use of hash-join plan
- types. The default is <literal>on</>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-enable-indexscan" xreflabel="enable_indexscan">
- <term><varname>enable_indexscan</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary>index scan</primary>
- </indexterm>
- <indexterm>
- <primary><varname>enable_indexscan</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Enables or disables the query planner's use of index-scan plan
- types. The default is <literal>on</>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-enable-mergejoin" xreflabel="enable_mergejoin">
- <term><varname>enable_mergejoin</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>enable_mergejoin</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Enables or disables the query planner's use of merge-join plan
- types. The default is <literal>on</>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-enable-nestloop" xreflabel="enable_nestloop">
- <term><varname>enable_nestloop</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>enable_nestloop</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Enables or disables the query planner's use of nested-loop join
- plans. It's not possible to suppress nested-loop joins entirely,
- but turning this variable off discourages the planner from using
- one if there are other methods available. The default is
- <literal>on</>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-enable-seqscan" xreflabel="enable_seqscan">
- <term><varname>enable_seqscan</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary>sequential scan</primary>
- </indexterm>
- <indexterm>
- <primary><varname>enable_seqscan</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Enables or disables the query planner's use of sequential scan
- plan types. It's not possible to suppress sequential scans
- entirely, but turning this variable off discourages the planner
- from using one if there are other methods available. The
- default is <literal>on</>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-enable-sort" xreflabel="enable_sort">
- <term><varname>enable_sort</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>enable_sort</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Enables or disables the query planner's use of explicit sort
- steps. It's not possible to suppress explicit sorts entirely,
- but turning this variable off discourages the planner from
- using one if there are other methods available. The default
- is <literal>on</>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-enable-tidscan" xreflabel="enable_tidscan">
- <term><varname>enable_tidscan</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>enable_tidscan</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Enables or disables the query planner's use of <acronym>TID</>
- scan plan types. The default is <literal>on</>.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </sect3>
- <sect3 id="runtime-config-query-constants">
- <title id="runtime-config-query-constants-title">
- Planner Cost Constants
- </title>
-
- <note>
- <para>
- Unfortunately, there is no well-defined method for determining
- ideal values for the family of <quote>cost</quote> variables that
- appear below. You are encouraged to experiment and share
- your findings.
- </para>
- </note>
-
- <variablelist>
-
- <varlistentry id="guc-effective-cache-size" xreflabel="effective_cache_size">
- <term><varname>effective_cache_size</varname> (<type>floating point</type>)</term>
- <indexterm>
- <primary><varname>effective_cache_size</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Sets the planner's assumption about the effective size of the
- disk cache that is available to a single index scan. This is
- factored into estimates of the cost of using an index; a higher
- value makes it more likely index scans will be used, a lower
- value makes it more likely sequential scans will be used. When
- setting this parameter you should consider both
- <productname>PostgreSQL</productname>'s shared buffers and the
- portion of the kernel's disk cache that will be used for
- <productname>PostgreSQL</productname> data files. Also, take into
- account the expected number of concurrent queries using different
- indexes, since they will have to share the available space.
- This parameter has no effect on the size of shared memory
- allocated by PostgreSQL, nor does it reserve kernel disk cache;
- it is used only for estimation purposes.
- The value is measured in disk pages, which are
- normally 8192 bytes each. The default is 1000.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-random-page-cost" xreflabel="random_page_cost">
- <term><varname>random_page_cost</varname> (<type>floating point</type>)</term>
- <indexterm>
- <primary><varname>random_page_cost</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Sets the planner's estimate of the cost of a
- nonsequentially fetched disk page. 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. The default is four.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-cpu-tuple-cost" xreflabel="cpu_tuple_cost">
- <term><varname>cpu_tuple_cost</varname> (<type>floating point</type>)</term>
- <indexterm>
- <primary><varname>cpu_tuple_cost</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Sets the planner's estimate of the cost of processing
- each row during a query. This is measured as a fraction of
- the cost of a sequential page fetch. The default is 0.01.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-cpu-index-tuple-cost" xreflabel="cpu_index_tuple_cost">
- <term><varname>cpu_index_tuple_cost</varname> (<type>floating point</type>)</term>
- <indexterm>
- <primary><varname>cpu_index_tuple_cost</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Sets the planner's estimate of the cost of processing
- each index row during an index scan. This is measured as a
- fraction of the cost of a sequential page fetch. The default
- is 0.001.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-cpu-operator-cost" xreflabel="cpu_operator_cost">
- <term><varname>cpu_operator_cost</varname> (<type>floating point</type>)</term>
- <indexterm>
- <primary><varname>cpu_operator_cost</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Sets the planner's estimate of the cost of processing each
- operator in a <literal>WHERE</> clause. This is measured as a fraction of
- the cost of a sequential page fetch. The default is 0.0025.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
-
- </sect3>
- <sect3 id="runtime-config-query-geqo">
- <title>Genetic Query Optimizer</title>
-
- <variablelist>
-
- <varlistentry id="guc-geqo" xreflabel="geqo">
- <indexterm>
- <primary>genetic query optimization</primary>
- </indexterm>
- <indexterm>
- <primary>GEQO</primary>
- <see>genetic query optimization</see>
- </indexterm>
- <indexterm>
- <primary><varname>geqo</> configuration parameter</primary>
- </indexterm>
- <term><varname>geqo</varname> (<type>boolean</type>)</term>
- <listitem>
- <para>
- Enables or disables genetic query optimization, which is an
- algorithm that attempts to do query planning without
- exhaustive searching. This is on by default. The
- <varname>geqo_threshold</varname> variable provides a more
- granular way to disable GEQO for certain classes of queries.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-geqo-threshold" xreflabel="geqo_threshold">
- <term><varname>geqo_threshold</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>geqo_threshold</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Use genetic query optimization to plan queries with at least
- this many <literal>FROM</> items involved. (Note that an outer
- <literal>JOIN</> construct counts as only one <literal>FROM</>
- item.) The default is 12. For simpler queries it is usually best
- to use the deterministic, exhaustive planner, but for queries with
- many tables the deterministic planner takes too long.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-geqo-effort" xreflabel="geqo_effort">
- <term><varname>geqo_effort</varname>
- (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>geqo_effort</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Controls the trade off between planning time and query plan
- efficiency in GEQO. This variable must be an integer in the
- range from 1 to 10. The default value is 5. Larger values
- increase the time spent doing query planning, but also
- increase the likelihood that an efficient query plan will be
- chosen.
- </para>
-
- <para>
- <varname>geqo_effort</varname> doesn't actually do anything
- directly; it is only used to compute the default values for
- the other variables that influence GEQO behavior (described
- below). If you prefer, you can set the other parameters by
- hand instead.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-geqo-pool-size" xreflabel="geqo_pool_size">
- <term><varname>geqo_pool_size</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>geqo_pool_size</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Controls the pool size used by GEQO. The pool size is the
- number of individuals in the genetic population. It must be
- at least two, and useful values are typically 100 to 1000. If
- it is set to zero (the default setting) then a suitable
- default is chosen based on <varname>geqo_effort</varname> and
- the number of tables in the query.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-geqo-generations" xreflabel="geqo_generations">
- <term><varname>geqo_generations</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>geqo_generations</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Controls the number of generations used by GEQO. Generations
- specifies the number of iterations of the algorithm. It must
- be at least one, and useful values are in the same range as
- the pool size. If it is set to zero (the default setting)
- then a suitable default is chosen based on
- <varname>geqo_pool_size</varname>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-geqo-selection-bias" xreflabel="geqo_selection_bias">
- <term><varname>geqo_selection_bias</varname> (<type>floating point</type>)</term>
- <indexterm>
- <primary><varname>geqo_selection_bias</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Controls the selection bias used by GEQO. The selection bias
- is the selective pressure within the population. Values can be
- from 1.50 to 2.00; the latter is the default.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </sect3>
- <sect3 id="runtime-config-query-other">
- <title>Other Planner Options</title>
-
- <variablelist>
-
- <varlistentry id="guc-default-statistics-target" xreflabel="default_statistics_target">
- <term><varname>default_statistics_target</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>default_statistics_target</> configuration parameter</primary>
- </indexterm>
- <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 is 10. For more information
- on the use of statistics by the <productname>PostgreSQL</>
- query planner, refer to <xref linkend="planner-stats">.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-constraint-exclusion" xreflabel="constraint_exclusion">
- <term><varname>constraint_exclusion</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary>constraint exclusion</primary>
- </indexterm>
- <indexterm>
- <primary><varname>constraint_exclusion</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Enables or disables the query planner's use of table constraints to
- limit table access. The default is <literal>off</>.
- </para>
-
- <para>
- When this parameter is <literal>on</>, the planner compares query
- conditions with table CHECK constraints, and omits scanning tables
- where the conditions contradict the constraints. (Presently
- this is done only for child tables of inheritance scans.) For
- example:
-
-<programlisting>
-CREATE TABLE parent(key integer, ...);
-CREATE TABLE child1000(check (key between 1000 and 1999)) INHERITS(parent);
-CREATE TABLE child2000(check (key between 2000 and 2999)) INHERITS(parent);
-...
-SELECT * FROM parent WHERE key = 2400;
-</programlisting>
-
- With constraint exclusion enabled, this SELECT will not scan
- <structname>child1000</> at all. This can improve performance when
- inheritance is used to build partitioned tables.
- </para>
-
- <para>
- Currently, <varname>constraint_exclusion</> defaults to
- <literal>off</>, because it risks incorrect results if
- query plans are cached --- if a table constraint is changed or dropped,
- the previously generated plan might now be wrong, and there is no
- built-in mechanism to force re-planning. (This deficiency will
- probably be addressed in a future
- <productname>PostgreSQL</productname> release.) Another reason
- for keeping it off is that the constraint checks are relatively
- expensive, and in many circumstances will yield no savings.
- It is recommended to turn this on only if you are actually using
- partitioned tables designed to take advantage of the feature.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-from-collapse-limit" xreflabel="from_collapse_limit">
- <term><varname>from_collapse_limit</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>from_collapse_limit</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- The planner will merge sub-queries into upper queries if the
- resulting <literal>FROM</literal> list would have no more than
- this many items. Smaller values reduce planning time but may
- yield inferior query plans. The default is 8. It is usually
- wise to keep this less than <xref linkend="guc-geqo-threshold">.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-join-collapse-limit" xreflabel="join_collapse_limit">
- <term><varname>join_collapse_limit</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>join_collapse_limit</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- The planner will rewrite explicit inner <literal>JOIN</>
- constructs into lists of <literal>FROM</> items whenever a
- list of no more than this many items in total would
- result. Prior to <productname>PostgreSQL</> 7.4, joins
- specified via the <literal>JOIN</literal> construct would
- never be reordered by the query planner. The query planner has
- subsequently been improved so that inner joins written in this
- form can be reordered; this configuration parameter controls
- the extent to which this reordering is performed.
- <note>
- <para>
- At present, the order of outer joins specified via the
- <literal>JOIN</> construct is never adjusted by the query
- planner; therefore, <varname>join_collapse_limit</> has no
- effect on this behavior. The planner may be improved to
- reorder some classes of outer joins in a future release of
- <productname>PostgreSQL</productname>.
- </para>
- </note>
- </para>
-
- <para>
- By default, this variable is set the same as
- <varname>from_collapse_limit</varname>, which is appropriate
- for most uses. Setting it to 1 prevents any reordering of
- inner <literal>JOIN</>s. Thus, the explicit join order
- specified in the query will be the actual order in which the
- relations are joined. The query planner does not always choose
- the optimal join order; advanced users may elect to
- temporarily set this variable to 1, and then specify the join
- order they desire explicitly. Another consequence of setting
- this variable to 1 is that the query planner will behave more
- like the <productname>PostgreSQL</productname> 7.3 query
- planner, which some users might find useful for backward
- compatibility reasons.
- </para>
-
- <para>
- Setting this variable to a value between 1 and
- <varname>from_collapse_limit</varname> might be useful to
- trade off planning time against the quality of the chosen plan
- (higher values produce better plans).
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </sect3>
- </sect2>
-
- <sect2 id="runtime-config-logging">
- <title>Error Reporting and Logging</title>
-
- <indexterm zone="runtime-config-logging">
- <primary>server log</primary>
- </indexterm>
-
- <sect3 id="runtime-config-logging-where">
- <title>Where to log</title>
-
- <indexterm zone="runtime-config-logging-where">
- <primary>where to log</primary>
- </indexterm>
-
- <variablelist>
-
- <varlistentry id="guc-log-destination" xreflabel="log_destination">
- <term><varname>log_destination</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>log_destination</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- <productname>PostgreSQL</productname> supports several methods
- for logging server messages, including
- <systemitem>stderr</systemitem> and
- <systemitem>syslog</systemitem>. On Windows,
- <systemitem>eventlog</systemitem> is also supported. Set this
- option to a list of desired log destinations separated by
- commas. The default is to log to <systemitem>stderr</systemitem>
- only.
- This option can only be set at server start or in the
- <filename>postgresql.conf</filename> configuration file.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-redirect-stderr" xreflabel="redirect_stderr">
- <term><varname>redirect_stderr</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>redirect_stderr</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- This option allows messages sent to <application>stderr</> to be
- captured and redirected into log files.
- This option, in combination with logging to <application>stderr</>,
- is often more useful than
- logging to <application>syslog</>, since some types of messages
- may not appear in <application>syslog</> output (a common example
- is dynamic-linker failure messages).
- This option can only be set at server start.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-log-directory" xreflabel="log_directory">
- <term><varname>log_directory</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>log_directory</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- When <varname>redirect_stderr</> is enabled, this option
- determines the directory in which log files will be created.
- It may be specified as an absolute path, or relative to the
- cluster data directory.
- This option can only be set at server start or in the
- <filename>postgresql.conf</filename> configuration file.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-log-filename" xreflabel="log_filename">
- <term><varname>log_filename</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>log_filename</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- When <varname>redirect_stderr</varname> is enabled, this option
- sets the file names of the created log files. The value
- is treated as a <systemitem>strftime</systemitem> pattern,
- so <literal>%</literal>-escapes
- can be used to specify time-varying file names.
- If no <literal>%</literal>-escapes are present,
- <productname>PostgreSQL</productname> will
- append the epoch of the new log file's open time. For example,
- if <varname>log_filename</varname> were <literal>server_log</literal>, then the
- chosen file name would be <literal>server_log.1093827753</literal>
- for a log starting at Sun Aug 29 19:02:33 2004 MST.
- This option can only be set at server start or in the
- <filename>postgresql.conf</filename> configuration file.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-log-rotation-age" xreflabel="log_rotation_age">
- <term><varname>log_rotation_age</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>log_rotation_age</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- When <varname>redirect_stderr</varname> is enabled, this option
- determines the maximum lifetime of an individual log file.
- After this many minutes have elapsed, a new log file will
- be created. Set to zero to disable time-based creation of
- new log files.
- This option can only be set at server start or in the
- <filename>postgresql.conf</filename> configuration file.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-log-rotation-size" xreflabel="log_rotation_size">
- <term><varname>log_rotation_size</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>log_rotation_size</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- When <varname>redirect_stderr</varname> is enabled, this option
- determines the maximum size of an individual log file.
- After this many kilobytes have been emitted into a log file,
- a new log file will be created. Set to zero to disable size-based
- creation of new log files.
- This option can only be set at server start or in the
- <filename>postgresql.conf</filename> configuration file.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-log-truncate-on-rotation" xreflabel="log_truncate_on_rotation">
- <term><varname>log_truncate_on_rotation</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>log_truncate_on_rotation</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- When <varname>redirect_stderr</varname> is enabled, this option will cause
- <productname>PostgreSQL</productname> to truncate (overwrite),
- rather than append to, any existing log file of the same name.
- However, truncation will occur only when a new file is being opened
- due to time-based rotation, not during server startup or size-based
- rotation. When off, pre-existing files will be appended to in
- all cases. For example, using this option in combination with
- a <varname>log_filename</varname> like <literal>postgresql-%H.log</literal>
- would result in generating twenty-four hourly log files and then
- cyclically overwriting them.
- This option can only be set at server start or in the
- <filename>postgresql.conf</filename> configuration file.
- </para>
- <para>
- Example: To keep 7 days of logs, one log file per day named
- <literal>server_log.Mon</literal>, <literal>server_log.Tue</literal>,
- etc, and automatically overwrite last week's log with this week's log,
- set <varname>log_filename</varname> to <literal>server_log.%a</literal>,
- <varname>log_truncate_on_rotation</varname> to <literal>on</literal>, and
- <varname>log_rotation_age</varname> to <literal>1440</literal>.
- </para>
- <para>
- Example: To keep 24 hours of logs, one log file per hour, but
- also rotate sooner if the log file size exceeds 1GB, set
- <varname>log_filename</varname> to <literal>server_log.%H%M</literal>,
- <varname>log_truncate_on_rotation</varname> to <literal>on</literal>,
- <varname>log_rotation_age</varname> to <literal>60</literal>, and
- <varname>log_rotation_size</varname> to <literal>1000000</literal>.
- Including <literal>%M</> in <varname>log_filename</varname> allows
- any size-driven rotations that may occur to select a filename
- different from the hour's initial filename.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-syslog-facility" xreflabel="syslog_facility">
- <term><varname>syslog_facility</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>syslog_facility</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- When logging to <application>syslog</> is enabled, this option
- determines the <application>syslog</application>
- <quote>facility</quote> to be used. You may choose
- from <literal>LOCAL0</>, <literal>LOCAL1</>,
- <literal>LOCAL2</>, <literal>LOCAL3</>, <literal>LOCAL4</>,
- <literal>LOCAL5</>, <literal>LOCAL6</>, <literal>LOCAL7</>;
- the default is <literal>LOCAL0</>. See also the
- documentation of your system's
- <application>syslog</application> daemon.
- This option can only be set at server start.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-syslog-ident" xreflabel="syslog_ident">
- <term><varname>syslog_ident</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>syslog_identity</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- When logging to <application>syslog</> is enabled, this option
- determines the program name used to identify
- <productname>PostgreSQL</productname> messages in
- <application>syslog</application> logs. The default is
- <literal>postgres</literal>.
- This option can only be set at server start.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </sect3>
- <sect3 id="runtime-config-logging-when">
- <title>When To Log</title>
-
- <variablelist>
-
- <varlistentry id="guc-client-min-messages" xreflabel="client_min_messages">
- <term><varname>client_min_messages</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>client_min_messages</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Controls which message levels are sent to the client.
- Valid values are <literal>DEBUG5</>,
- <literal>DEBUG4</>, <literal>DEBUG3</>, <literal>DEBUG2</>,
- <literal>DEBUG1</>, <literal>LOG</>, <literal>NOTICE</>,
- <literal>WARNING</>, and <literal>ERROR</>. Each level
- includes all the levels that follow it. The later the level,
- the fewer messages are sent. The default is
- <literal>NOTICE</>. Note that <literal>LOG</> has a different
- rank here than in <varname>log_min_messages</>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-log-min-messages" xreflabel="log_min_messages">
- <term><varname>log_min_messages</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>log_min_messages</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Controls which message levels are written to the server log.
- Valid values are <literal>DEBUG5</>, <literal>DEBUG4</>,
- <literal>DEBUG3</>, <literal>DEBUG2</>, <literal>DEBUG1</>,
- <literal>INFO</>, <literal>NOTICE</>, <literal>WARNING</>,
- <literal>ERROR</>, <literal>LOG</>, <literal>FATAL</>, and
- <literal>PANIC</>. Each level includes all the levels that
- follow it. The later the level, the fewer messages are sent
- to the log. The default is <literal>NOTICE</>. Note that
- <literal>LOG</> has a different rank here than in
- <varname>client_min_messages</>.
- Only superusers can change this setting.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-log-error-verbosity" xreflabel="log_error_verbosity">
- <term><varname>log_error_verbosity</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>log_error_verbosity</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Controls the amount of detail written in the server log for each
- message that is logged. Valid values are <literal>TERSE</>,
- <literal>DEFAULT</>, and <literal>VERBOSE</>, each adding more
- fields to displayed messages.
- Only superusers can change this setting.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-log-min-error-statement" xreflabel="log_min_error_statement">
- <term><varname>log_min_error_statement</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>log_min_error_statement</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Controls whether or not the SQL statement that causes an error
- condition will also be recorded in the server log. All SQL
- statements that cause an error of the specified level or
- higher are logged. The default is
- <literal>PANIC</literal> (effectively turning this feature
- off for normal use). Valid values are <literal>DEBUG5</literal>,
- <literal>DEBUG4</literal>, <literal>DEBUG3</literal>,
- <literal>DEBUG2</literal>, <literal>DEBUG1</literal>,
- <literal>INFO</literal>, <literal>NOTICE</literal>,
- <literal>WARNING</literal>, <literal>ERROR</literal>,
- <literal>FATAL</literal>, and <literal>PANIC</literal>. For
- example, if you set this to <literal>ERROR</literal> then all
- SQL statements causing errors, fatal errors, or panics will be
- logged. Enabling this option can be helpful in tracking down
- the source of any errors that appear in the server log.
- Only superusers can change this setting.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-log-min-duration-statement" xreflabel="log_min_duration_statement">
- <term><varname>log_min_duration_statement</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>log_min_duration_statement</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Logs the statement and its duration on a single log line if its
- duration is greater than or equal to the specified number of
- milliseconds. Setting this to zero will print all statements
- and their durations. Minus-one (the default) disables the
- feature. For example, if you set it to <literal>250</literal>
- then all SQL statements that run 250ms or longer will be
- logged. Enabling this option can be useful in tracking down
- unoptimized queries in your applications. This setting is
- independent of <varname>log_statement</varname> and
- <varname>log_duration</varname>. Only superusers can change
- this setting.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-silent-mode" xreflabel="silent_mode">
- <term><varname>silent_mode</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>silent_mode</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Runs the server silently. If this option is set, the server
- will automatically run in background and any controlling
- terminals are disassociated (same effect as
- <command>postmaster</>'s <option>-S</option> option).
- The server's standard output and standard error are redirected
- to <literal>/dev/null</>, so any messages sent to them will be lost.
- Unless <application>syslog</> logging is selected or
- <varname>redirect_stderr</> is enabled, using this option
- is discouraged because it makes it impossible to see error messages.
- </para>
- </listitem>
- </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 command 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>
-
- <variablelist>
-
- <varlistentry>
- <term><varname>debug_print_parse</varname> (<type>boolean</type>)</term>
- <term><varname>debug_print_rewritten</varname> (<type>boolean</type>)</term>
- <term><varname>debug_print_plan</varname> (<type>boolean</type>)</term>
- <term><varname>debug_pretty_print</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>debug_print_parse</> configuration parameter</primary>
- </indexterm>
- <indexterm>
- <primary><varname>debug_print_rewritten</> configuration parameter</primary>
- </indexterm>
- <indexterm>
- <primary><varname>debug_print_plan</> configuration parameter</primary>
- </indexterm>
- <indexterm>
- <primary><varname>debug_pretty_print</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- These options enable various debugging output to be emitted.
- For each executed query, they print
- the resulting parse tree, the query rewriter output, or the
- execution plan. <varname>debug_pretty_print</varname> indents
- these displays to produce a more readable but much longer
- output format. <varname>client_min_messages</varname> or
- <varname>log_min_messages</varname> must be
- <literal>DEBUG1</literal> or lower to actually send this output
- to the client or the server log, respectively.
- These options are off by default.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-log-connections" xreflabel="log_connections">
- <term><varname>log_connections</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>log_connections</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- This outputs a line to the server log detailing each successful
- connection. This is off by default, although it is probably very
- useful. This option can only be set at server start or in the
- <filename>postgresql.conf</filename> configuration file.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-log-disconnections" xreflabel="log_disconnections">
- <term><varname>log_disconnections</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>log_disconnections</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- This outputs a line in the server log similar to
- <varname>log_connections</varname> but at session termination,
- and includes the duration of the session. This is off by
- default. This option can only be set at server start or in the
- <filename>postgresql.conf</filename> configuration file.
- </para>
- </listitem>
- </varlistentry>
-
-
- <varlistentry id="guc-log-duration" xreflabel="log_duration">
- <term><varname>log_duration</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>log_duration</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Causes the duration of every completed statement which satisfies
- <varname>log_statement</> to be logged. When using this option,
- if you are not using <application>syslog</>, it is recommended
- that you log the PID or session ID using <varname>log_line_prefix</>
- so that you can link the statement to the
- duration using the process ID or session ID. The default is
- <literal>off</>. Only superusers can change this setting.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-log-line-prefix" xreflabel="log_line_prefix">
- <term><varname>log_line_prefix</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>log_line_prefix</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- This is a <function>printf</>-style string that is output at the
- beginning of each log line. The default is an empty string.
- Each recognized escape is replaced as outlined
- below - anything else that looks like an escape is ignored. Other
- characters are copied straight to the log line. Some escapes are
- only recognised by session processes, and do not apply to
- background processes such as the postmaster. <application>Syslog</>
- produces its own
- time stamp and process ID information, so you probably do not want to
- use those escapes if you are using <application>syslog</>.
- This option can only be set at server start or in the
- <filename>postgresql.conf</filename> configuration file.
-
- <informaltable>
- <tgroup cols="3">
- <thead>
- <row>
- <entry>Escape</entry>
- <entry>Effect</entry>
- <entry>Session only</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><literal>%u</literal></entry>
- <entry>User name</entry>
- <entry>yes</entry>
- </row>
- <row>
- <entry><literal>%d</literal></entry>
- <entry>Database name</entry>
- <entry>yes</entry>
- </row>
- <row>
- <entry><literal>%r</literal></entry>
- <entry>Remote host name or IP address, and remote port</entry>
- <entry>yes</entry>
- </row>
- <row>
- <entry><literal>%h</literal></entry>
- <entry>Remote Hostname or IP address</entry>
- <entry>yes</entry>
- </row>
- <row>
- <entry><literal>%p</literal></entry>
- <entry>Process ID</entry>
- <entry>no</entry>
- </row>
- <row>
- <entry><literal>%t</literal></entry>
- <entry>Time stamp (no milliseconds)</entry>
- <entry>no</entry>
- </row>
- <row>
- <entry><literal>%m</literal></entry>
- <entry>Time stamp with milliseconds</entry>
- <entry>no</entry>
- </row>
- <row>
- <entry><literal>%i</literal></entry>
- <entry>Command tag: This is the command that generated the log line.</entry>
- <entry>yes</entry>
- </row>
- <row>
- <entry><literal>%c</literal></entry>
- <entry>Session ID: A unique identifier for each session.
- It is 2 4-byte hexadecimal numbers (without leading zeros)
- separated by a dot. The numbers
- are the session start time and the process ID, so this can also
- be used as a space saving way of printing these items.</entry>
- <entry>yes</entry>
- </row>
- <row>
- <entry><literal>%l</literal></entry>
- <entry>Number of the log line for each process, starting at 1</entry>
- <entry>no</entry>
- </row>
- <row>
- <entry><literal>%s</literal></entry>
- <entry>Session start time stamp</entry>
- <entry>yes</entry>
- </row>
- <row>
- <entry><literal>%x</literal></entry>
- <entry>Transaction ID</entry>
- <entry>yes</entry>
- </row>
- <row>
- <entry><literal>%q</literal></entry>
- <entry>Does not produce any output, but tells non-session
- processes to stop at this point in the string. Ignored by
- session processes.</entry>
- <entry>no</entry>
- </row>
- <row>
- <entry><literal>%%</literal></entry>
- <entry>Literal <literal>%</></entry>
- <entry>no</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-log-statement" xreflabel="log_statement">
- <term><varname>log_statement</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>log_statement</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Controls which SQL statements are logged. Valid values are
- <literal>none</>, <literal>ddl</>, <literal>mod</>, and
- <literal>all</>. <literal>ddl</> logs all data definition
- commands like <literal>CREATE</>, <literal>ALTER</>, and
- <literal>DROP</> commands. <literal>mod</> logs all
- <literal>ddl</> statements, plus <literal>INSERT</>,
- <literal>UPDATE</>, <literal>DELETE</>, <literal>TRUNCATE</>,
- and <literal>COPY FROM</>. <literal>PREPARE</> and
- <literal>EXPLAIN ANALYZE</> statements are also logged if their
- contained command is of an appropriate type.
- </para>
- <para>
- The default is <literal>none</>. Only superusers can change this
- setting.
- </para>
-
- <note>
- <para>
- The <command>EXECUTE</command> statement is not considered a
- <literal>ddl</> or <literal>mod</> statement. When it is logged,
- only the name of the prepared statement is reported, not the
- actual prepared statement.
- </para>
-
- <para>
- When a function is defined in the
- <application>PL/pgSQL</application>server-side language, any queries
- executed by the function will only be logged the first time that the
- function is invoked in a particular session. This is because
- <application>PL/pgSQL</application> keeps a cache of the
- query plans produced for the SQL statements in the function.
- </para>
- </note>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-log-hostname" xreflabel="log_hostname">
- <term><varname>log_hostname</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>log_hostname</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- By default, connection log messages only show the IP address of the
- connecting host. Turning on this option causes logging of the
- host name as well. Note that depending on your host name resolution
- setup this might impose a non-negligible performance penalty. This
- option can only be set at server start or in the
- <filename>postgresql.conf</filename> file.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </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>
- <indexterm>
- <primary><varname>log_statement_stats</> configuration parameter</primary>
- </indexterm>
- <indexterm>
- <primary><varname>log_parser_stats</> configuration parameter</primary>
- </indexterm>
- <indexterm>
- <primary><varname>log_planner_stats</> configuration parameter</primary>
- </indexterm>
- <indexterm>
- <primary><varname>log_executor_stats</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- For each query, write performance statistics of the respective
- module to the server log. This is a crude profiling
- instrument. <varname>log_statement_stats</varname> reports total
- statement statistics, while the others report per-module statistics.
- <varname>log_statement_stats</varname> cannot be enabled together with
- any of the per-module options. All of these options are disabled by
- default. Only superusers can change these settings.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
-
- </sect3>
- <sect3 id="runtime-config-statistics-collector">
- <title>Query and Index Statistics Collector</title>
- <variablelist>
-
- <varlistentry id="guc-stats-start-collector" xreflabel="stats_start_collector">
- <term><varname>stats_start_collector</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>stats_start_collector</> configuration parameter</primary>
- </indexterm>
- <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 id="guc-stats-command-string" xreflabel="stats_command_string">
- <term><varname>stats_command_string</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>stats_command_string</> configuration parameter</primary>
- </indexterm>
- <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 id="guc-stats-block-level" xreflabel="stats_block_level">
- <term><varname>stats_block_level</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>stats_block_level</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Enables the collection of block-level statistics on database
- activity. This option is disabled by default. If this option
- is enabled, the data that is produced 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 id="guc-stats-row-level" xreflabel="stats_row_level">
- <term><varname>stats_row_level</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>stats_row_level</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Enables the collection of row-level statistics on database
- activity. This option is disabled by default. If this option
- is enabled, the data that is produced 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 id="guc-stats-reset-on-server-start" xreflabel="stats_reset_on_server_start">
- <term><varname>stats_reset_on_server_start</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>stats_reset_on_server_start</> configuration parameter</primary>
- </indexterm>
- <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 <literal>off</>. This option can only
- be set at server start.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </sect3>
- </sect2>
-
- <sect2 id="runtime-config-autovacuum">
- <title>Automatic Vacuuming</title>
-
- <para>
- Beginning in <productname>PostgreSQL</> 8.1, there is an optional server
- process called the <firstterm>autovacuum daemon</>, whose purpose is
- to automate the issuance of periodic <command>VACUUM</> and
- <command>ANALYZE</> commands. When enabled, the autovacuum daemon
- runs periodically and checks for tables that have had a large number
- of updated or deleted tuples. This check uses the row-level statistics
- collection facility; therefore, the autovacuum daemon cannot be used
- unless <xref linkend="guc-stats-start-collector"> and
- <xref linkend="guc-stats-row-level"> are set TRUE. Also, it's
- important to allow a slot for the autovacuum process when choosing
- the value of <xref linkend="guc-superuser-reserved-connections">.
- </para>
-
- <variablelist>
-
- <varlistentry id="guc-autovacuum" xreflabel="autovacuum">
- <term><varname>autovacuum</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>autovacuum</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Controls whether the server should start the
- autovacuum subprocess. This is off by default.
- This option can only be set at server start or in the
- <filename>postgresql.conf</filename> file.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-autovacuum-naptime" xreflabel="autovacuum_naptime">
- <term><varname>autovacuum_naptime</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>autovacuum_naptime</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies the delay between activity rounds for the autovacuum
- subprocess. In each round the subprocess examines one database
- and issues <command>VACUUM</> and <command>ANALYZE</> commands
- as needed for tables in that database. The delay is measured
- in seconds, and the default is 60.
- This option can only be set at server start or in the
- <filename>postgresql.conf</filename> file.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-autovacuum-vacuum-threshold" xreflabel="autovacuum_vacuum_threshold">
- <term><varname>autovacuum_vacuum_threshold</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>autovacuum_vacuum_threshold</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies the minimum number of updated or deleted tuples needed
- to trigger a <command>VACUUM</> in any one table.
- The default is 1000.
- This option can only be set at server start or in the
- <filename>postgresql.conf</filename> file.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-autovacuum-analyze-threshold" xreflabel="autovacuum_analyze_threshold">
- <term><varname>autovacuum_analyze_threshold</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>autovacuum_analyze_threshold</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies the minimum number of inserted, updated or deleted tuples
- needed to trigger an <command>ANALYZE</> in any one table.
- The default is 500.
- This option can only be set at server start or in the
- <filename>postgresql.conf</filename> file.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-autovacuum-vacuum-scale-factor" xreflabel="autovacuum_vacuum_scale_factor">
- <term><varname>autovacuum_vacuum_scale_factor</varname> (<type>floating point</type>)</term>
- <indexterm>
- <primary><varname>autovacuum_vacuum_scale_factor</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies a fraction of the table size to add to
- <varname>autovacuum_vacuum_threshold</varname>
- when deciding whether to trigger a <command>VACUUM</>.
- The default is 0.4.
- This option can only be set at server start or in the
- <filename>postgresql.conf</filename> file.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-autovacuum-analyze-scale-factor" xreflabel="autovacuum_analyze_scale_factor">
- <term><varname>autovacuum_analyze_scale_factor</varname> (<type>floating point</type>)</term>
- <indexterm>
- <primary><varname>autovacuum_analyze_scale_factor</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies a fraction of the table size to add to
- <varname>autovacuum_analyze_threshold</varname>
- when deciding whether to trigger an <command>ANALYZE</>.
- The default is 0.2.
- This option can only be set at server start or in the
- <filename>postgresql.conf</filename> file.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-autovacuum-vacuum-cost-delay" xreflabel="autovacuum_vacuum_cost_delay">
- <term><varname>autovacuum_vacuum_cost_delay</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>autovacuum_vacuum_cost_delay</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies the cost delay value that will be used in automatic
- <command>VACUUM</> operations. If -1 is specified (which is the
- default), the regular
- <xref linkend="guc-vacuum-cost-delay"> value will be used.
- This setting can be overridden for individual tables by entries in
- <structname>pg_autovacuum</>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-autovacuum-vacuum-cost-limit" xreflabel="autovacuum_vacuum_cost_limit">
- <term><varname>autovacuum_vacuum_cost_limit</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>autovacuum_vacuum_cost_limit</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies the cost limit value that will be used in automatic
- <command>VACUUM</> operations. If -1 is specified (which is the
- default), the regular
- <xref linkend="guc-vacuum-cost-limit"> value will be used.
- This setting can be overridden for individual tables by entries in
- <structname>pg_autovacuum</>.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </sect2>
-
- <sect2 id="runtime-config-client">
- <title>Client Connection Defaults</title>
-
- <sect3 id="runtime-config-client-statement">
- <title>Statement Behavior</title>
- <variablelist>
-
- <varlistentry id="guc-search-path" xreflabel="search_path">
- <term><varname>search_path</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>search_path</> configuration parameter</primary>
- </indexterm>
- <indexterm><primary>path</><secondary>for schemas</></>
- <listitem>
- <para>
- This variable specifies the order in which schemas are searched
- when an object (table, data type, function, etc.) is referenced by a
- simple name with no schema component. When there are objects of
- identical names in different schemas, the one found first
- in the search path is used. An object that is not in any of the
- schemas in the search path can only be referenced by specifying
- its containing schema with a qualified (dotted) name.
- </para>
-
- <para>
- The value for <varname>search_path</varname> has to be a comma-separated
- list of schema names. If one of the list items is
- the special value <literal>$user</literal>, then the schema
- having the name returned by <function>SESSION_USER</> is substituted, if there
- is such a schema. (If not, <literal>$user</literal> is ignored.)
- </para>
-
- <para>
- The system catalog schema, <literal>pg_catalog</>, is always
- searched, whether it is mentioned in the path or not. If it is
- mentioned in the path then it will be searched in the specified
- order. If <literal>pg_catalog</> is not in the path then it will
- be searched <emphasis>before</> searching any of the path items.
- It should also be noted that the temporary-table schema,
- <literal>pg_temp_<replaceable>nnn</></>, is implicitly searched before any of
- these.
- </para>
-
- <para>
- When objects are created without specifying a particular target
- schema, they will be placed in the first schema listed
- in the search path. An error is reported if the search path is
- empty.
- </para>
-
- <para>
- The default value for this parameter is
- <literal>'$user, public'</literal> (where the second part will be
- ignored if there is no schema named <literal>public</>).
- This supports shared use of a database (where no users
- have private schemas, and all share use of <literal>public</>),
- private per-user schemas, and combinations of these. Other
- effects can be obtained by altering the default search path
- setting, either globally or per-user.
- </para>
-
- <para>
- The current effective value of the search path can be examined
- via the <acronym>SQL</acronym> function
- <function>current_schemas()</>. This is not quite the same as
- examining the value of <varname>search_path</varname>, since
- <function>current_schemas()</> shows how the requests
- appearing in <varname>search_path</varname> were resolved.
- </para>
-
- <para>
- For more information on schema handling, see <xref linkend="ddl-schemas">.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-default-tablespace" xreflabel="default_tablespace">
- <term><varname>default_tablespace</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>default_tablespace</> configuration parameter</primary>
- </indexterm>
- <indexterm><primary>tablespace</><secondary>default</></>
- <listitem>
- <para>
- This variable specifies the default tablespace in which to create
- objects (tables and indexes) when a <command>CREATE</> command does
- not explicitly specify a tablespace.
- </para>
-
- <para>
- The value is either the name of a tablespace, or an empty string
- to specify using the default tablespace of the current database.
- If the value does not match the name of any existing tablespace,
- <productname>PostgreSQL</> will automatically use the default
- tablespace of the current database.
- </para>
-
- <para>
- For more information on tablespaces,
- see <xref linkend="manage-ag-tablespaces">.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-check-function-bodies" xreflabel="check_function_bodies">
- <term><varname>check_function_bodies</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>check_function_bodies</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- This parameter is normally on. When set to <literal>off</>, it
- disables validation of the function body string during <xref
- linkend="sql-createfunction"
- endterm="sql-createfunction-title">. Disabling validation is
- occasionally useful to avoid problems such as forward references
- when restoring function definitions from a dump.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-default-transaction-isolation" xreflabel="default_transaction_isolation">
- <indexterm>
- <primary>transaction isolation level</primary>
- </indexterm>
- <indexterm>
- <primary><varname>default_transaction_isolation</> configuration parameter</primary>
- </indexterm>
- <term><varname>default_transaction_isolation</varname> (<type>string</type>)</term>
- <listitem>
- <para>
- Each SQL transaction has an isolation level, which can be
- either <quote>read uncommitted</quote>, <quote>read
- committed</quote>, <quote>repeatable read</quote>, or
- <quote>serializable</quote>. This parameter controls the
- default isolation level of each new transaction. The default
- is <quote>read committed</quote>.
- </para>
-
- <para>
- Consult <xref linkend="mvcc"> and <xref
- linkend="sql-set-transaction"
- endterm="sql-set-transaction-title"> for more information.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-default-transaction-read-only" xreflabel="default_transaction_read_only">
- <indexterm>
- <primary>read-only transaction</primary>
- </indexterm>
- <indexterm>
- <primary><varname>default_transaction_read_only</> configuration parameter</primary>
- </indexterm>
-
- <term><varname>default_transaction_read_only</varname> (<type>boolean</type>)</term>
- <listitem>
- <para>
- A read-only SQL transaction cannot alter non-temporary tables.
- This parameter controls the default read-only status of each new
- transaction. The default is <literal>off</> (read/write).
- </para>
-
- <para>
- Consult <xref linkend="sql-set-transaction"
- endterm="sql-set-transaction-title"> for more information.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-statement-timeout" xreflabel="statement_timeout">
- <term><varname>statement_timeout</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>statement_timeout</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Abort any statement that takes over the specified number of
- milliseconds. A value of zero (the default) turns off the limitation.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </sect3>
- <sect3 id="runtime-config-client-format">
- <title>Locale and Formatting</title>
-
- <variablelist>
-
- <varlistentry id="guc-datestyle" xreflabel="DateStyle">
- <term><varname>DateStyle</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>DateStyle</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Sets the display format for date and time values, as well as the
- rules for interpreting ambiguous date input values. For
- historical reasons, this variable contains two independent
- components: the output format specification (<literal>ISO</>,
- <literal>Postgres</>, <literal>SQL</>, or <literal>German</>)
- and the input/output specification for year/month/day ordering
- (<literal>DMY</>, <literal>MDY</>, or <literal>YMD</>). These
- can be set separately or together. The keywords <literal>Euro</>
- and <literal>European</> are synonyms for <literal>DMY</>; the
- keywords <literal>US</>, <literal>NonEuro</>, and
- <literal>NonEuropean</> are synonyms for <literal>MDY</>. See
- <xref linkend="datatype-datetime"> for more information. The
- default is <literal>ISO, MDY</>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-timezone" xreflabel="timezone">
- <term><varname>timezone</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>timezone</> configuration parameter</primary>
- </indexterm>
- <indexterm><primary>time zone</></>
- <listitem>
- <para>
- Sets the time zone for displaying and interpreting time
- stamps. The default is 'unknown', which means to use whatever
- the system environment specifies as the time zone. See <xref
- linkend="datatype-datetime"> for more information.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-australian-timezones" xreflabel="australian_timezones">
- <term><varname>australian_timezones</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>australian_timezones</> configuration parameter</primary>
- </indexterm>
- <indexterm><primary>time zone</><secondary>Australian</></>
- <listitem>
- <para>
- If set to on, <literal>ACST</literal>,
- <literal>CST</literal>, <literal>EST</literal>, and
- <literal>SAT</literal> are interpreted as Australian time
- zones rather than as North/South American time zones and
- Saturday. The default is <literal>off</>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-extra-float-digits" xreflabel="extra_float_digits">
- <indexterm>
- <primary>significant digits</primary>
- </indexterm>
- <indexterm>
- <primary>floating-point</primary>
- <secondary>display</secondary>
- </indexterm>
- <indexterm>
- <primary><varname>extra_float_digits</> configuration parameter</primary>
- </indexterm>
-
- <term><varname>extra_float_digits</varname> (<type>integer</type>)</term>
- <listitem>
- <para>
- This parameter adjusts the number of digits displayed for
- floating-point values, including <type>float4</>, <type>float8</>,
- and geometric data types. The parameter value is added to the
- standard number of digits (<literal>FLT_DIG</> or <literal>DBL_DIG</>
- as appropriate). The value can be set as high as 2, to include
- partially-significant digits; this is especially useful for dumping
- float data that needs to be restored exactly. Or it can be set
- negative to suppress unwanted digits.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-client-encoding" xreflabel="client_encoding">
- <term><varname>client_encoding</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>client_encoding</> configuration parameter</primary>
- </indexterm>
- <indexterm><primary>character set</></>
- <listitem>
- <para>
- Sets the client-side encoding (character set).
- The default is to use the database encoding.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-lc-messages" xreflabel="lc_messages">
- <term><varname>lc_messages</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>lc_messages</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Sets the language in which messages are displayed. Acceptable
- values are system-dependent; see <xref linkend="locale"> for
- more information. If this variable is set to the empty string
- (which is the default) then the value is inherited from the
- execution environment of the server in a system-dependent way.
- </para>
-
- <para>
- On some systems, this locale category does not exist. Setting
- this variable will still work, but there will be no effect.
- Also, there is a chance that no translated messages for the
- desired language exist. In that case you will continue to see
- the English messages.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-lc-monetary" xreflabel="lc_monetary">
- <term><varname>lc_monetary</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>lc_monetary</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Sets the locale to use for formatting monetary amounts, for
- example with the <function>to_char</function> family of
- functions. Acceptable values are system-dependent; see <xref
- linkend="locale"> for more information. If this variable is
- set to the empty string (which is the default) then the value
- is inherited from the execution environment of the server in a
- system-dependent way.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-lc-numeric" xreflabel="lc_numeric">
- <term><varname>lc_numeric</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>lc_numeric</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Sets the locale to use for formatting numbers, for example
- with the <function>to_char</function> family of
- functions. Acceptable values are system-dependent; see <xref
- linkend="locale"> for more information. If this variable is
- set to the empty string (which is the default) then the value
- is inherited from the execution environment of the server in a
- system-dependent way.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-lc-time" xreflabel="lc_time">
- <term><varname>lc_time</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>lc_time</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Sets the locale to use for formatting date and time values.
- (Currently, this setting does nothing, but it may in the
- future.) Acceptable values are system-dependent; see <xref
- linkend="locale"> for more information. If this variable is
- set to the empty string (which is the default) then the value
- is inherited from the execution environment of the server in a
- system-dependent way.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
-
- </sect3>
- <sect3 id="runtime-config-client-other">
- <title>Other Defaults</title>
-
- <variablelist>
-
- <varlistentry id="guc-explain-pretty-print" xreflabel="explain_pretty_print">
- <term><varname>explain_pretty_print</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>explain_pretty_print</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Determines whether <command>EXPLAIN VERBOSE</> uses the
- indented or non-indented format for displaying detailed
- query-tree dumps. The default is <literal>on</>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-dynamic-library-path" xreflabel="dynamic_library_path">
- <term><varname>dynamic_library_path</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>dynamic_library_path</> configuration parameter</primary>
- </indexterm>
- <indexterm><primary>dynamic loading</></>
- <listitem>
- <para>
- If a dynamically loadable module needs to be opened and the
- file name specified in the <command>CREATE FUNCTION</command> or
- <command>LOAD</command> command
- does not have a directory component (i.e. the
- name does not contain a slash), the system will search this
- path for the required file.
- </para>
-
- <para>
- The value for <varname>dynamic_library_path</varname> has to be a
- list of absolute directory paths separated by colons (or semi-colons
- on Windows). If a list element starts
- with the special string <literal>$libdir</literal>, the
- compiled-in <productname>PostgreSQL</productname> package
- library directory is substituted for <literal>$libdir</literal>. This
- is where the modules provided by the standard
- <productname>PostgreSQL</productname> distribution are installed.
- (Use <literal>pg_config --pkglibdir</literal> to find out the name of
- this directory.) For example:
-<programlisting>
-dynamic_library_path = '/usr/local/lib/postgresql:/home/my_project/lib:$libdir'
-</programlisting>
- or, in a Windows environment:
-<programlisting>
-dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
-</programlisting>
- </para>
-
- <para>
- The default value for this parameter is
- <literal>'$libdir'</literal>. If the value is set to an empty
- string, the automatic path search is turned off.
- </para>
-
- <para>
- This parameter can be changed at run time by superusers, but a
- setting done that way will only persist until the end of the
- client connection, so this method should be reserved for
- development purposes. The recommended way to set this parameter
- is in the <filename>postgresql.conf</filename> configuration
- file.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </sect3>
- </sect2>
-
- <sect2 id="runtime-config-locks">
- <title>Lock Management</title>
-
- <variablelist>
-
- <varlistentry id="guc-deadlock-timeout" xreflabel="deadlock_timeout">
- <indexterm>
- <primary>deadlock</primary>
- <secondary>timeout during</secondary>
- </indexterm>
- <indexterm>
- <primary>timeout</primary>
- <secondary>deadlock</secondary>
- </indexterm>
- <indexterm>
- <primary><varname>deadlock_timeout</> configuration parameter</primary>
- </indexterm>
-
- <term><varname>deadlock_timeout</varname> (<type>integer</type>)</term>
- <listitem>
- <para>
- This is the amount of time, in milliseconds, to wait on a lock
- before checking to see if there is a deadlock condition. The
- check for deadlock is relatively slow, so the server doesn't run
- it every time it waits for a lock. We (optimistically?) assume
- that deadlocks are not common in production applications and
- just wait on the lock for a while before starting the check for a
- deadlock. Increasing this value reduces the amount of time
- wasted in needless deadlock checks, but slows down reporting of
- real deadlock errors. The default is 1000 (i.e., one second),
- which is probably about the smallest value you would want in
- practice. On a heavily loaded server you might want to raise it.
- Ideally the setting should exceed your typical transaction time,
- so as to improve the odds that a lock will be released before
- the waiter decides to check for deadlock.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-max-locks-per-transaction" xreflabel="max_locks_per_transaction">
- <term><varname>max_locks_per_transaction</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>max_locks_per_transaction</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- The shared lock table is created with room to describe locks on
- <varname>max_locks_per_transaction</varname> *
- (<xref linkend="guc-max-connections"> +
- <xref linkend="guc-max-prepared-transactions">) objects;
- hence, no more than this many distinct objects can
- be locked at any one time. (Thus, this parameter's name may be
- confusing: it is not a hard limit on the number of locks taken
- by any one transaction, but rather a maximum average value.)
- The default, 64, has historically
- proven sufficient, but you might need to raise this value if you
- have clients that touch many different tables in a single
- transaction. This option can only be set at server start.
- </para>
-
- <para>
- Increasing this parameter may cause <productname>PostgreSQL</>
- to request more <systemitem class="osname">System V</> shared
- memory than your operating system's default configuration
- allows. See <xref linkend="sysvipc"> for information on how to
- adjust those parameters, if necessary.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </sect2>
-
- <sect2 id="runtime-config-compatible">
- <title>Version and Platform Compatibility</title>
-
- <sect3 id="runtime-config-compatible-version">
- <title>Previous PostgreSQL Versions</title>
- <variablelist>
-
- <varlistentry id="guc-add-missing-from" xreflabel="add_missing_from">
- <term><varname>add_missing_from</varname> (<type>boolean</type>)</term>
- <indexterm><primary>FROM</><secondary>missing</></>
- <indexterm>
- <primary><varname>add_missing_from</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- When on, tables that are referenced by a query will be
- automatically added to the <literal>FROM</> clause if not
- already present. This behavior does not comply with the SQL
- standard and many people dislike it because it can mask mistakes
- (such as referencing a table where you should have referenced
- its alias). The default is <literal>off</>. This variable can be
- enabled for compatibility with releases of
- <productname>PostgreSQL</> prior to 8.1, where this behavior was
- allowed by default.
- </para>
-
- <para>
- Note that even when this variable is enabled, a warning
- message will be emitted for each implicit <literal>FROM</>
- entry referenced by a query. Users are encouraged to update
- their applications to not rely on this behavior, by adding all
- tables referenced by a query to the query's <literal>FROM</>
- clause (or its <literal>USING</> clause in the case of
- <command>DELETE</>).
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-regex-flavor" xreflabel="regex_flavor">
- <term><varname>regex_flavor</varname> (<type>string</type>)</term>
- <indexterm><primary>regular expressions</></>
- <indexterm>
- <primary><varname>regex_flavor</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- The regular expression <quote>flavor</> can be set to
- <literal>advanced</>, <literal>extended</>, or <literal>basic</>.
- The default is <literal>advanced</>. The <literal>extended</>
- setting may be useful for exact backwards compatibility with
- pre-7.4 releases of <productname>PostgreSQL</>. See
- <xref linkend="posix-syntax-details"> for details.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-sql-inheritance" xreflabel="sql_inheritance">
- <term><varname>sql_inheritance</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>sql_inheritance</> configuration parameter</primary>
- </indexterm>
- <indexterm><primary>inheritance</></>
- <listitem>
- <para>
- This controls the inheritance semantics, in particular whether
- subtables are included by various commands by default. They were
- not included in versions prior to 7.1. If you need the old
- behavior you can set this variable to <literal>off</>, but in
- the long run you are encouraged to change your applications to
- use the <literal>ONLY</literal> key word to exclude subtables.
- See <xref linkend="ddl-inherit"> for more information about
- inheritance.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-default-with-oids" xreflabel="default_with_oids">
- <term><varname>default_with_oids</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>default_with_oids</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- This controls whether <command>CREATE TABLE</command> and
- <command>CREATE TABLE AS</command> include an OID column in
- newly-created tables, if neither <literal>WITH OIDS</literal>
- nor <literal>WITHOUT OIDS</literal> is specified. It also
- determines whether OIDs will be included in tables created by
- <command>SELECT INTO</command>. In <productname>PostgreSQL</>
- 8.1 <varname>default_with_oids</> is disabled by default; in
- prior versions of PostgreSQL, it was on by default.
- </para>
-
- <para>
- The use of OIDs in user tables is considered deprecated, so
- most installations should leave this variable disabled.
- Applications that require OIDs for a particular table should
- specify <literal>WITH OIDS</literal> when creating the
- table. This variable can be enabled for compatibility with old
- applications that do not follow this behavior.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-escape-string-warning" xreflabel="escape_string_warning">
- <term><varname>escape_string_warning</varname> (<type>boolean</type>)</term>
- <indexterm><primary>strings</><secondary>escape</></>
- <indexterm>
- <primary><varname>escape_string_warning</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- When on, a warning is issued if a backslash (<literal>\</>)
- appears in an ordinary string literal (<literal>'...'</>
- syntax). The default is <literal>off</>.
- </para>
- <para>
- Escape string syntax (<literal>E'...'</>) should be used for
- escapes, because in future versions of
- <productname>PostgreSQL</productname> ordinary strings will have
- the standard-conforming behavior of treating backslashes
- literally.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </sect3>
- <sect3 id="runtime-config-compatible-clients">
- <title>Platform and Client Compatibility</title>
- <variablelist>
-
- <varlistentry id="guc-transform-null-equals" xreflabel="transform_null_equals">
- <term><varname>transform_null_equals</varname> (<type>boolean</type>)</term>
- <indexterm><primary>IS NULL</></>
- <indexterm>
- <primary><varname>transform_null_equals</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- When on, expressions of the form <literal><replaceable>expr</> =
- NULL</literal> (or <literal>NULL =
- <replaceable>expr</></literal>) are treated as
- <literal><replaceable>expr</> IS NULL</literal>, that is, they
- return true if <replaceable>expr</> evaluates to the null value,
- and false otherwise. The correct SQL-spec-compliant behavior of
- <literal><replaceable>expr</> = NULL</literal> is to always
- return null (unknown). Therefore this option defaults to
- <literal>off</>.
- </para>
-
- <para>
- However, filtered forms in <productname>Microsoft
- Access</productname> generate queries that appear to use
- <literal><replaceable>expr</> = NULL</literal> to test for
- null values, so if you use that interface to access the database you
- might want to turn this option on. Since expressions of the
- form <literal><replaceable>expr</> = NULL</literal> always
- return the null value (using the correct interpretation) they are not
- very useful and do not appear often in normal applications, so
- this option does little harm in practice. But new users are
- frequently confused about the semantics of expressions
- involving null values, so this option is not on by default.
- </para>
-
- <para>
- Note that this option only affects the exact form <literal>= NULL</>,
- not other comparison operators or other expressions
- that are computationally equivalent to some expression
- involving the equals operator (such as <literal>IN</literal>).
- Thus, this option is not a general fix for bad programming.
- </para>
-
- <para>
- Refer to <xref linkend="functions-comparison"> for related information.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </sect3>
- </sect2>
-
- <sect2 id="runtime-config-preset">
- <title>Preset Options</title>
-
- <para>
- The following <quote>parameters</> are read-only, and are determined
- when <productname>PostgreSQL</productname> is compiled or when it is
- installed. As such, they have been excluded from the sample
- <filename>postgresql.conf</> file. These options report
- various aspects of <productname>PostgreSQL</productname> behavior
- that may be of interest to certain applications, particularly
- administrative front-ends.
- </para>
-
- <variablelist>
-
- <varlistentry id="guc-block-size" xreflabel="block_size">
- <term><varname>block_size</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>block_size</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Reports the size of a disk block. It is determined by the value
- of <literal>BLCKSZ</> when building the server. The default
- value is 8192 bytes. The meaning of some configuration
- variables (such as <xref linkend="guc-shared-buffers">) is
- influenced by <varname>block_size</varname>. See <xref
- linkend="runtime-config-resource"> for information.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-integer-datetimes" xreflabel="integer_datetimes">
- <term><varname>integer_datetimes</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>integer_datetimes</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Reports whether <productname>PostgreSQL</productname> was built
- with support for 64-bit-integer dates and times. It is set by
- configuring with <literal>--enable-integer-datetimes</literal>
- when building <productname>PostgreSQL</productname>. The
- default value is <literal>off</literal>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-lc-collate" xreflabel="lc_collate">
- <term><varname>lc_collate</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>lc_collate</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Reports the locale in which sorting of textual data is done.
- See <xref linkend="locale"> for more information.
- The value is determined when the database cluster is initialized.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-lc-ctype" xreflabel="lc_ctype">
- <term><varname>lc_ctype</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>lc_ctype</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Reports the locale that determines character classifications.
- See <xref linkend="locale"> for more information.
- The value is determined when the database cluster is initialized.
- Ordinarily this will be the same as <varname>lc_collate</varname>,
- but for special applications it might be set differently.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-max-function-args" xreflabel="max_function_args">
- <term><varname>max_function_args</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>max_function_args</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Reports the maximum number of function arguments. It is determined by
- the value of <literal>FUNC_MAX_ARGS</> when building the server. The
- default value is 100.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-max-identifier-length" xreflabel="max_identifier_length">
- <term><varname>max_identifier_length</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>max_identifier_length</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Reports the maximum identifier length. It is determined as one
- less than the value of <literal>NAMEDATALEN</> when building
- the server. The default value of <literal>NAMEDATALEN</> is
- 64; therefore the default
- <varname>max_identifier_length</varname> is 63.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-max-index-keys" xreflabel="max_index_keys">
- <term><varname>max_index_keys</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>max_index_keys</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Reports the maximum number of index keys. It is determined by
- the value of <literal>INDEX_MAX_KEYS</> when building the server. The
- default value is 32.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-server-encoding" xreflabel="server_encoding">
- <term><varname>server_encoding</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>server_encoding</> configuration parameter</primary>
- </indexterm>
- <indexterm><primary>character set</></>
- <listitem>
- <para>
- Reports the database encoding (character set).
- It is determined when the database is created. Ordinarily,
- clients need only be concerned with the value of <xref
- linkend="guc-client-encoding">.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-server-version" xreflabel="server_version">
- <term><varname>server_version</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>server_version</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Reports the version number of the server. It is determined by the
- value of <literal>PG_VERSION</> when building the server.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-standard-conforming-strings" xreflabel="standard_conforming_strings">
- <term><varname>standard_conforming_strings</varname> (<type>boolean</type>)</term>
- <indexterm><primary>strings</><secondary>escape</></>
- <indexterm>
- <primary><varname>standard_conforming_strings</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Reports whether ordinary string literals
- (<literal>'...'</>) treat backslashes literally, as specified in
- the SQL standard. The value is currently always <literal>off</>,
- indicating that backslashes are treated as escapes. It is planned
- that this will change to <literal>on</> in a future
- <productname>PostgreSQL</productname> release when string literal
- syntax changes to meet the standard. Applications may check this
- parameter to determine how string literals will be processed.
- The presence of this parameter can also be taken as an indication
- that the escape string syntax (<literal>E'...'</>) is supported.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </sect2>
-
- <sect2 id="runtime-config-custom">
- <title>Customized Options</title>
-
- <para>
- This feature was designed to allow options not normally known to
- <productname>PostgreSQL</productname> to be added by add-on modules
- (such as procedural languages). This allows add-on modules to be
- configured in the standard ways.
- </para>
-
- <variablelist>
-
- <varlistentry id="guc-custom-variable-classes" xreflabel="custom_variable_classes">
- <term><varname>custom_variable_classes</varname> (<type>string</type>)</term>
- <indexterm>
- <primary><varname>custom_variable_classes</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- This variable specifies one or several class names to be used for
- custom variables, in the form of a comma-separated list. A custom
- variable is a variable not normally known
- to <productname>PostgreSQL</productname> proper but used by some
- add-on module. Such variables must have names consisting of a class
- name, a dot, and a variable name. <varname>custom_variable_classes</>
- specifies all the class names in use in a particular installation.
- This option can only be set at server start or in the
- <filename>postgresql.conf</filename> configuration file.
- </para>
-
- </listitem>
- </varlistentry>
- </variablelist>
-
- <para>
- The difficulty with setting custom variables in
- <filename>postgresql.conf</> is that the file must be read before add-on
- modules have been loaded, and so custom variables would ordinarily be
- rejected as unknown. When <varname>custom_variable_classes</> is set,
- the server will accept definitions of arbitrary variables within each
- specified class. These variables will be treated as placeholders and
- will have no function until the module that defines them is loaded. When a
- module for a specific class is loaded, it will add the proper variable
- definitions for its class name, convert any placeholder
- values according to those definitions, and issue warnings for any
- placeholders of its class that remain (which presumably would be
- misspelled configuration variables).
- </para>
-
- <para>
- Here is an example of what <filename>postgresql.conf</> might contain
- when using custom variables:
-
-<programlisting>
-custom_variable_classes = 'plr,plperl'
-plr.path = '/usr/lib/R'
-plperl.use_strict = true
-plruby.use_strict = true # generates error: unknown class name
-</programlisting>
- </para>
- </sect2>
-
- <sect2 id="runtime-config-developer">
- <title>Developer Options</title>
-
- <para>
- The following options are intended for work on the
- <productname>PostgreSQL</productname> 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>
- <varlistentry id="guc-debug-assertions" xreflabel="debug_assertions">
- <term><varname>debug_assertions</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>debug_assertions</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Turns on various assertion checks. This is a debugging aid. If
- you are experiencing strange problems or crashes you might want
- to turn this on, as it might expose programming mistakes. To use
- this option, the macro <symbol>USE_ASSERT_CHECKING</symbol>
- must be defined when <productname>PostgreSQL</productname> is
- built (accomplished by the <command>configure</command> option
- <option>--enable-cassert</option>). Note that
- <varname>debug_assertions</varname> defaults to <literal>on</>
- if <productname>PostgreSQL</productname> has been built with
- assertions enabled.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-pre-auth-delay" xreflabel="pre_auth_delay">
- <term><varname>pre_auth_delay</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>pre_auth_delay</> configuration parameter</primary>
- </indexterm>
- <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 id="guc-trace-notify" xreflabel="trace_notify">
- <term><varname>trace_notify</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>trace_notify</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Generates a great amount of debugging output for the
- <command>LISTEN</command> and <command>NOTIFY</command>
- commands. <xref linkend="guc-client-min-messages"> or
- <xref linkend="guc-log-min-messages"> 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>log_btree_build_stats</varname> (<type>boolean</type>)</term>
- <listitem>
- <para>
- Various other code tracing and debugging options.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-wal-debug" xreflabel="wal_debug">
- <term><varname>wal_debug</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>wal_debug</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- If on, emit WAL-related debugging output. This option is
- only available if the <symbol>WAL_DEBUG</symbol> macro was
- defined when <productname>PostgreSQL</productname> was
- compiled.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-zero-damaged-pages" xreflabel="zero_damaged_pages">
- <term><varname>zero_damaged_pages</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>zero_damaged_pages</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Detection of a damaged page header normally causes
- <productname>PostgreSQL</> to report an error, aborting the current
- command. Setting <varname>zero_damaged_pages</> to on causes
- the system to instead report a warning, zero out the damaged page,
- and continue processing. This behavior <emphasis>will destroy data</>,
- namely all the rows on the damaged page. But it allows you to get
- past the error and retrieve rows from any undamaged pages that may
- be present in the table. So it is useful for recovering data if
- corruption has occurred due to hardware or software error. You should
- generally not set this on until you have given up hope of recovering
- data from the damaged page(s) of a table. The
- default setting is <literal>off</>, and it can only be changed
- by a superuser.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </sect2>
- <sect2 id="runtime-config-short">
- <title>Short Options</title>
-
- <para>
- For convenience there are also single letter command-line option switches
- available for some parameters. They are described in <xref
- linkend="runtime-config-short-table">.
- </para>
-
- <table id="runtime-config-short-table">
- <title>Short option key</title>
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Short option</entry>
- <entry>Equivalent</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><option>-B <replaceable>x</replaceable></option></entry>
- <entry><literal>shared_buffers = <replaceable>x</replaceable></></entry>
- </row>
- <row>
- <entry><option>-d <replaceable>x</replaceable></option></entry>
- <entry><literal>log_min_messages = DEBUG<replaceable>x</replaceable></></entry>
- </row>
- <row>
- <entry><option>-F</option></entry>
- <entry><literal>fsync = off</></entry>
- </row>
- <row>
- <entry><option>-h <replaceable>x</replaceable></option></entry>
- <entry><literal>listen_addresses = <replaceable>x</replaceable></></entry>
- </row>
- <row>
- <entry><option>-i</option></entry>
- <entry><literal>listen_addresses = '*'</></entry>
- </row>
- <row>
- <entry><option>-k <replaceable>x</replaceable></option></entry>
- <entry><literal>unix_socket_directory = <replaceable>x</replaceable></></entry>
- </row>
- <row>
- <entry><option>-l</option></entry>
- <entry><literal>ssl = on</></entry>
- </row>
- <row>
- <entry><option>-N <replaceable>x</replaceable></option></entry>
- <entry><literal>max_connections = <replaceable>x</replaceable></></entry>
- </row>
- <row>
- <entry><option>-p <replaceable>x</replaceable></option></entry>
- <entry><literal>port = <replaceable>x</replaceable></></entry>
- </row>
-
- <row>
- <entry>
- <option>-fb</option>, <option>-fh</option>, <option>-fi</option>,
- <option>-fm</option>, <option>-fn</option>,
- <option>-fs</option>, <option>-ft</option><footnote
- id="fn.runtime-config-short">
- <para>
- For historical reasons, these options must be passed to
- the individual server process via the <option>-o</option>
- <command>postmaster</command> option, for example,
-<screen>
-$ <userinput>postmaster -o '-S 1024 -s'</userinput>
-</screen>
- or via <envar>PGOPTIONS</envar> from the client side, as
- explained above.
- </para>
- </footnote>
- </entry>
- <entry>
- <literal>enable_bitmapscan = off</>,
- <literal>enable_hashjoin = off</>,
- <literal>enable_indexscan = off</>,
- <literal>enable_mergejoin = off</>,
- <literal>enable_nestloop = off</>,
- <literal>enable_seqscan = off</>,
- <literal>enable_tidscan = off</>
- </entry>
- </row>
-
- <row>
- <entry><option>-s</option><footnoteref linkend="fn.runtime-config-short"></entry>
- <entry><literal>log_statement_stats = on</></entry>
- </row>
-
- <row>
- <entry><option>-S <replaceable>x</replaceable></option><footnoteref linkend="fn.runtime-config-short">
- </entry>
- <entry><literal>work_mem = <replaceable>x</replaceable></></entry>
- </row>
-
- <row>
- <entry><option>-tpa</option>, <option>-tpl</option>, <option>-te</option><footnoteref linkend="fn.runtime-config-short"></entry>
- <entry><literal>log_parser_stats = on</>,
- <literal>log_planner_stats = on</>,
- <literal>log_executor_stats = on</></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- </sect2>
- </sect1>
-
-
<sect1 id="kernel-resources">
<title>Managing Kernel Resources</title>