<!--
$PostgreSQL: pgsql/doc/src/sgml/ref/postgres-ref.sgml,v 1.47.2.1 2007/01/04 00:58:01 tgl Exp $
PostgreSQL documentation
-->

<refentry id="app-postgres">
 <refmeta>
  <refentrytitle><application>postgres</application></refentrytitle>
  <manvolnum>1</manvolnum>
  <refmiscinfo>Application</refmiscinfo>
 </refmeta>

 <refnamediv>
  <refname>postgres</refname>
  <refpurpose><productname>PostgreSQL</productname> database server</refpurpose>
 </refnamediv>

 <indexterm zone="app-postgres">
  <primary>postgres</primary>
 </indexterm>

 <refsynopsisdiv>
  <cmdsynopsis>
   <command>postgres</command>
   <arg rep="repeat"><replaceable>option</></arg>
  </cmdsynopsis>
 </refsynopsisdiv>

 <refsect1>
  <title>Description</title>

  <para>
   <command>postgres</command> is the
   <productname>PostgreSQL</productname> database server.  In order
   for a client application to access a database it connects (over a
   network or locally) to a running <command>postgres</command> process.
   The <command>postgres</command> instance then starts a separate server
   process to handle the connection.
  </para>

  <para>
   One <command>postgres</command> instance always manages the data from
   exactly one database cluster.  A database cluster is a collection
   of databases that is stored at a common file system location (the
   <quote>data area</quote>).  More than one
   <command>postgres</command> process can run on a system at one
   time, so long as they use different data areas and different
   communication ports (see below).  When
   <command>postgres</command> starts it needs to know the location
   of the data area.  The location must be specified by the
   <option>-D</option> option or the <envar>PGDATA</envar> environment
   variable; there is no default.  Typically, <option>-D</option> or
   <envar>PGDATA</envar> points directly to the data area directory
   created by <xref linkend="app-initdb">.  Other possible file layouts are
   discussed in <xref linkend="runtime-config-file-locations">.
  </para>

  <para>
   By default <command>postgres</command> starts in the
   foreground and prints log messages to the standard error stream.  In
   practical applications <command>postgres</command>
   should be started as a background process, perhaps at boot time.
  </para>

  <para>
   The <command>postgres</command> command can also be called in
   single-user mode.  The primary use for this mode is during
   bootstrapping by <xref linkend="app-initdb">.  Sometimes it is used
   for debugging or disaster recovery (but note that running a single-user
   server is not truly suitable for debugging the server, since no
   realistic interprocess communication and locking will happen).
   When invoked in single-user
   mode from the shell, the user can enter queries and the results
   will be printed to the screen, but in a form that is more useful
   for developers than end users.  In the single-user mode,
   the session user will be set to the user with ID 1, and implicit
   superuser powers are granted to this user.
   This user does not actually have to exist, so the single-user mode
   can be used to manually recover from certain
   kinds of accidental damage to the system catalogs.
  </para>
 </refsect1>

 <refsect1 id="app-postgres-options">
  <title>Options</title>

   <para>
    <command>postgres</command> accepts the following command-line
    arguments.  For a detailed discussion of the options consult <xref
    linkend="runtime-config">.  You can save typing most of these
    options by setting up a configuration file.  Some (safe) options
    can also be set from the connecting client in an
    application-dependent way to apply only for that session.  For
    example, if the environment variable <envar>PGOPTIONS</envar> is
    set, then <application>libpq</>-based clients will pass that
    string to the server, which will interpret it as
    <command>postgres</command> command-line options.
   </para>

   <refsect2>
    <title>General Purpose</title>
    
    <variablelist>
     <varlistentry>
      <term><option>-A 0|1</option></term>
      <listitem>
       <para>
        Enables run-time assertion checks, which is a debugging aid to
        detect programming mistakes.  This option is only available if
        assertions were enabled when <productname>PostgreSQL</> was
        compiled. If so, the default is on.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-B <replaceable class="parameter">nbuffers</replaceable></option></term>
      <listitem>
       <para>
        Sets the number of shared buffers for use by the server
        processes.  The default value of this parameter is chosen
        automatically by <application>initdb</application>; refer to <xref
        linkend="runtime-config-resource-memory"> for more information.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-c <replaceable>name</replaceable>=<replaceable>value</replaceable></option></term>
      <listitem>
       <para>
        Sets a named run-time parameter. The configuration parameters
        supported by <productname>PostgreSQL</productname> are
        described in <xref linkend="runtime-config">. Most of the
        other command line options are in fact short forms of such a
        parameter assignment.  <option>-c</> can appear multiple times
        to set multiple parameters.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-d <replaceable>debug-level</replaceable></option></term>
      <listitem>
       <para>
        Sets the debug level.  The higher this value is set, the more
        debugging output is written to the server log.  Values are
        from 1 to 5.  It is also possible to pass <literal>-d
        0</literal> for a specific session, which will prevent the
        server log level of the parent <command>postgres</> process from being
        propagated to this session.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-D <replaceable class="parameter">datadir</replaceable></option></term>
      <listitem>
       <para>
        Specifies the file system location of the data directory or
        configuration file(s).  See
        <xref linkend="runtime-config-file-locations"> for details.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-e</option></term>
      <listitem>
       <para>
        Sets the default date style to <quote>European</quote>, that is
        <literal>DMY</> ordering of input date fields.  This also causes
        the day to be printed before the month in certain date output formats.
        See <xref linkend="datatype-datetime"> for more information.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-F</option></term>
      <listitem>
       <para>
        Disables <function>fsync</function> calls for improved
        performance, at the risk of data corruption in the event of a
        system crash.  Specifying this option is equivalent to
        disabling the <xref linkend="guc-fsync"> configuration
        parameter. Read the detailed documentation before using this!
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-h <replaceable class="parameter">hostname</replaceable></option></term>
      <listitem>
       <para>
        Specifies the IP host name or address on which
        <command>postgres</command> is to listen for TCP/IP
        connections from client applications.  The value can also be a
        comma-separated list of addresses, or <literal>*</> to specify
        listening on all available interfaces.  An empty value
        specifies not listening on any IP addresses, in which case
        only Unix-domain sockets can be used to connect to the
        server.  Defaults to listening only on
        <systemitem class="systemname">localhost</systemitem>.
        Specifying this option is equivalent to setting the <xref
        linkend="guc-listen-addresses"> configuration parameter.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-i</option></term>
      <listitem>
       <para>
        Allows remote clients to connect via TCP/IP (Internet domain)
        connections.  Without this option, only local connections are
        accepted.  This option is equivalent to setting
        <varname>listen_addresses</> to <literal>*</> in
        <filename>postgresql.conf</> or via <option>-h</>.
       </para>
       <para>
        This option is deprecated since it does not allow access to the
        full functionality of <xref linkend="guc-listen-addresses">.
        It's usually better to set <varname>listen_addresses</> directly.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-k <replaceable class="parameter">directory</replaceable></option></term>
      <listitem>
       <para>
        Specifies the directory of the Unix-domain socket on which
        <command>postgres</command> is to listen for
        connections from client applications.  The default is normally
        <filename>/tmp</filename>, but can be changed at build time.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-l</option></term>
      <listitem>
       <para>
        Enables secure connections using <acronym>SSL</acronym>.
        <productname>PostgreSQL</productname> must have been compiled with
        support for <acronym>SSL</acronym> for this option to be
        available. For more information on using <acronym>SSL</acronym>,
        refer to <xref linkend="ssl-tcp">.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-N <replaceable class="parameter">max-connections</replaceable></option></term>
      <listitem>
       <para>
        Sets the maximum number of client connections that this
        server will accept.  By
        default, this value is 32, but it can be set as high as your
        system will support.  (Note that
        <option>-B</option> is required to be at least twice
        <option>-N</option>.  See <xref linkend="kernel-resources"> for a discussion of
        system resource requirements for large numbers of client
        connections.) Specifying this option is equivalent to setting the
        <xref linkend="guc-max-connections"> configuration parameter.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-o <replaceable class="parameter">extra-options</replaceable></option></term>
      <listitem>
       <para>
        The command line-style options specified in <replaceable
        class="parameter">extra-options</replaceable> are passed to
        all server processes started by this
        <command>postgres</command> process.  If the option string contains
        any spaces, the entire string must be quoted.
       </para>

       <para>
        The use of this option is obsolete; all command-line options
        for server processes can be specified directly on the
        <command>postgres</command> command line.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-p <replaceable class="parameter">port</replaceable></option></term>
      <listitem>
       <para>
        Specifies the TCP/IP port or local Unix domain socket file
        extension on which <command>postgres</command>
        is to listen for connections from client applications.
        Defaults to the value of the <envar>PGPORT</envar> environment
        variable, or if <envar>PGPORT</envar> is not set, then
        defaults to the value established during compilation (normally
        5432).  If you specify a port other than the default port,
        then all client applications must specify the same port using
        either command-line options or <envar>PGPORT</envar>.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-s</option></term>
      <listitem>
       <para>
        Print time information and other statistics at the end of each command.
        This is useful for benchmarking or for use in tuning the number of
        buffers.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-S</option> <replaceable class="parameter">work-mem</replaceable></term>
      <listitem>
       <para>
        Specifies the amount of memory to be used by internal sorts and hashes
        before resorting to temporary disk files.  See the description of the
        <varname>work_mem</> configuration parameter in <xref
        linkend="runtime-config-resource-memory">.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>--<replaceable>name</replaceable>=<replaceable>value</replaceable></option></term>
      <listitem>
       <para>
        Sets a named run-time parameter; a shorter form of
        <option>-c</>.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>--describe-config</option></term>
      <listitem>
       <para>
        This option dumps out the server's internal configuration variables, 
        descriptions, and defaults in tab-delimited <command>COPY</> format.
        It is designed primarily for use by administration tools.
       </para>
      </listitem>
     </varlistentry>
    </variablelist>
   </refsect2>

   <refsect2>
    <title>Semi-internal Options</title>

    <para>
     There are several other options that may be specified, used
     mainly for debugging purposes 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.  These are listed
     here only for the use by <productname>PostgreSQL</productname>
     system developers.  Furthermore, any of these options may
     disappear or change in a future release without notice.
    </para>

    <variablelist>
     <varlistentry>
      <term><option>-f</option> <literal>{ s | i | m | n | h }</literal></term>
      <listitem>
       <para>
        Forbids the use of particular scan and join methods:
        <literal>s</literal> and <literal>i</literal>
        disable sequential and index scans respectively, while
        <literal>n</literal>, <literal>m</literal>, and <literal>h</literal>
        disable nested-loop, merge and hash joins respectively.
       </para>
        
       <para>
        Neither sequential scans nor nested-loop joins can be disabled
        completely; the <literal>-fs</literal> and
        <literal>-fn</literal> options simply discourage the optimizer
        from using those plan types if it has any other alternative.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-n</option></term>
      <listitem>
       <para>
        This option is for debugging problems that cause a server
        process to die abnormally.  The ordinary strategy in this
        situation is to notify all other server processes that they
        must terminate and then reinitialize the shared memory and
        semaphores.  This is because an errant server process could
        have corrupted some shared state before terminating.  This
        option specifies that <command>postgres</command> will
        not reinitialize shared data structures.  A knowledgeable
        system programmer can then use a debugger to examine shared
        memory and semaphore state.
       </para>
     </listitem>
    </varlistentry>

     <varlistentry>
      <term><option>-O</option></term>
      <listitem>
       <para>
        Allows the structure of system tables to be modified.  This is
        used by <command>initdb</command>.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-P</option></term>
      <listitem>
       <para>
        Ignore system indexes when reading system tables (but still update
        the indexes when modifying the tables).  This is useful when
        recovering from damaged system indexes.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-t</option> <literal>pa[rser] | pl[anner] | e[xecutor]</literal></term>
      <listitem>
       <para>
        Print timing statistics for each query relating to each of the
        major system modules.  This option cannot be used together
        with the <option>-s</option> option.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-T</option></term>
      <listitem>
       <para>
        This option is for debugging problems that cause a server
        process to die abnormally.  The ordinary strategy in this
        situation is to notify all other server processes that they
        must terminate and then reinitialize the shared memory and
        semaphores.  This is because an errant server process could
        have corrupted some shared state before terminating.  This
        option specifies that <command>postgres</command> will
        stop all other server processes by sending the signal
        <literal>SIGSTOP</literal>, but will not cause them to
        terminate.  This permits system programmers to collect core
        dumps from all server processes by hand.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-v</option> <replaceable class="parameter">protocol</replaceable></term>
      <listitem>
       <para>
        Specifies the version number of the frontend/backend protocol
        to be used for a particular session.  This option is for
        internal use only.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-W</option> <replaceable class="parameter">seconds</replaceable></term>
      <listitem>
       <para>
        A delay of this many seconds occurs when a new server process
        is started, after it conducts the authentication procedure.
        This is intended to give an opportunity to attach to the
        server process with a debugger.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-y</option> <replaceable class="parameter">database</replaceable></term>
      <listitem>
       <para>
        Indicates that this is a subprocess started by a parent
        <command>postgres</command> process, and specifies the database to
        use.  This option is for internal use only.
       </para>
      </listitem>
     </varlistentry>
    </variablelist>
   </refsect2>

   <refsect2>
    <title>Options for single-user mode</title>

    <para>
     The following options only apply to the single-user mode.
    </para>

    <variablelist>
     <varlistentry>
      <term><option>--single</option></term>
      <listitem>
       <para>
        Selects the single-user mode.  This must be the first argument
        on the command line.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><replaceable class="parameter">database</replaceable></term>
      <listitem>
       <para>
        Specifies the name of the database to be accessed.  If it is
        omitted it defaults to the user name.   
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-E</option></term>
      <listitem>
       <para>
        Echo all commands.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-j</option></term>
      <listitem>
       <para>
        Disables use of newline as a statement delimiter.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-r</option> <replaceable class="parameter">filename</replaceable></term>
      <listitem>
       <para>
        Send all server log output to <replaceable
        class="parameter">filename</replaceable>.  In normal multiuser
        mode, this option is ignored, and <systemitem>stderr</> is
        used by all processes.
       </para>
      </listitem>
     </varlistentry>
    </variablelist>
   </refsect2>
 </refsect1>

 <refsect1>
  <title>Environment</title>

  <variablelist>
   <varlistentry>
    <term><envar>PGCLIENTENCODING</envar></term>

    <listitem>
     <para>
      Default character encoding used by clients.  (The clients may
      override this individually.)  This value can also be set in the
      configuration file.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry>
    <term><envar>PGDATA</envar></term>

    <listitem>
     <para>
      Default data directory location
     </para>
    </listitem>
   </varlistentry>

   <varlistentry>
    <term><envar>PGDATESTYLE</envar></term>

    <listitem>
     <para>
      Default value of the <xref linkend="guc-datestyle"> run-time
      parameter.  (The use of this environment variable is deprecated.)
     </para>
    </listitem>
   </varlistentry>

   <varlistentry>
    <term><envar>PGPORT</envar></term>

    <listitem>
     <para>
      Default port (preferably set in the configuration file)
     </para>
    </listitem>
   </varlistentry>

   <varlistentry>
    <term><envar>TZ</envar></term>

    <listitem>
     <para>
      Server time zone
     </para>
    </listitem>
   </varlistentry>

  </variablelist>
 </refsect1>

 <refsect1>
   <title>Diagnostics</title>

   <para>
    A failure message mentioning <literal>semget</> or
    <literal>shmget</> probably indicates you need to configure your
    kernel to provide adequate shared memory and semaphores.  For more
    discussion see <xref linkend="kernel-resources">.  You may be able
    to postpone reconfiguring your kernel by decreasing <xref
    linkend="guc-shared-buffers"> to reduce the shared memory
    consumption of <productname>PostgreSQL</>, and/or by reducing
    <xref linkend="guc-max-connections"> to reduce the semaphore
    consumption.
   </para>

   <para>
    A failure message suggesting that another server is already running
    should be checked carefully, for example by using the command
<screen>
<prompt>$</prompt> <userinput>ps ax | grep postgres</userinput>
</screen>
        or
<screen>
<prompt>$</prompt> <userinput>ps -ef | grep postgres</userinput>
</screen>
    depending on your system.  If you are certain that no conflicting
    server is running, you may remove the lock file mentioned in the
    message and try again.
   </para>

   <para>
    A failure message indicating inability to bind to a port may
    indicate that that port is already in use by some
    non-<productname>PostgreSQL</productname> process.  You may also
    get this error if you terminate <command>postgres</command>
    and immediately restart it using the same port; in this case, you
    must simply wait a few seconds until the operating system closes
    the port before trying again.  Finally, you may get this error if
    you specify a port number that your operating system considers to
    be reserved.  For example, many versions of Unix consider port
    numbers under 1024 to be <quote>trusted</quote> and only permit
    the Unix superuser to access them.
   </para>

 </refsect1>

 <refsect1>
  <title>Notes</title>
  
  <para>
   If at all possible, <emphasis>do not</emphasis> use
   <literal>SIGKILL</literal> to kill the main
   <command>postgres</command> server.  Doing so will prevent
   <command>postgres</command> from freeing the system
   resources (e.g., shared memory and semaphores) that it holds before
   terminating.  This may cause problems for starting a fresh
   <command>postgres</command> run.
  </para>

  <para>
   To terminate the <command>postgres</command> server normally, the
   signals <literal>SIGTERM</literal>, <literal>SIGINT</literal>, or
   <literal>SIGQUIT</literal> can be used.  The first will wait for
   all clients to terminate before quitting, the second will
   forcefully disconnect all clients, and the third will quit
   immediately without proper shutdown, resulting in a recovery run
   during restart.  The <literal>SIGHUP</literal> signal will reload
   the server configuration files.  It is also possible to send
   <literal>SIGHUP</literal> to an individual server process, but that
   is usually not sensible.
  </para>

  <para>
   The utility command <xref linkend="app-pg-ctl"> can be used to
   start and shut down the <command>postgres</command> server
   safely and comfortably.
  </para>

  <para>
   To cancel a running query, send the <literal>SIGINT</literal> signal
   to the process running that command.
  </para>

  <para>
   The <command>postgres</command> server uses <literal>SIGTERM</literal>
   to tell subordinate server processes to quit normally and
   <literal>SIGQUIT</literal> to terminate without the normal cleanup.
   These signals <emphasis>should not</emphasis> be used by users.  It
   is also unwise to send <literal>SIGKILL</literal> to a server
   process &mdash; the main <command>postgres</command> process will
   interpret this as a crash and will force all the sibling processes
   to quit as part of its standard crash-recovery procedure.
  </para>
 </refsect1>

 <refsect1 id="app-postgres-bugs">
  <title>Bugs</title>
  <para>
   The <option>--</> options will not work on <systemitem
   class="osname">FreeBSD</> or <systemitem class="osname">OpenBSD</>.
   Use <option>-c</> instead. This is a bug in the affected operating
   systems; a future release of <productname>PostgreSQL</productname>
   will provide a workaround if this is not fixed.
  </para>
 </refsect1>

 <refsect1>
  <title>Usage</title>

   <para>
    To start a single-user mode server, use a command like
<screen>
<userinput>postgres --single -D /usr/local/pgsql/data <replaceable>other-options</> my_database</userinput>
</screen>
    Provide the correct path to the database directory with <option>-D</>, or
    make sure that the environment variable <envar>PGDATA</> is set.
    Also specify the name of the particular database you want to work in.
   </para>

   <para>
    Normally, the single-user mode server treats newline as the command
    entry terminator; there is no intelligence about semicolons,
    as there is in <application>psql</>.  To continue a command
    across multiple lines, you must type backslash just before each
    newline except the last one.
   </para>

   <para>
    But if you use the <option>-j</> command line switch, then newline does
    not terminate command entry.  In this case, the server will read the standard input
    until the end-of-file (<acronym>EOF</>) marker, then
    process the input as a single command string.  Backslash-newline is not
    treated specially in this case.
   </para>

   <para>
    To quit the session, type <acronym>EOF</acronym>
    (<keycombo action="simul"><keycap>Control</><keycap>D</></>, usually).
    If you've
    used <option>-j</>, two consecutive <acronym>EOF</>s are needed to exit.
   </para>

   <para>
    Note that the single-user mode server does not provide sophisticated
    line-editing features (no command history, for example).
   </para>
 </refsect1>

 <refsect1 id="app-postgres-examples">
  <title>Examples</title>

  <para>
   To start <command>postgres</command> in the background
   using default values, type:

<screen>
<prompt>$</prompt> <userinput>nohup postgres &gt;logfile 2&gt;&amp;1 &lt;/dev/null &amp;</userinput>
</screen>
  </para>

  <para>
   To start <command>postgres</command> with a specific
   port:
<screen>
<prompt>$</prompt> <userinput>postgres -p 1234</userinput>
</screen>
   This command will start up <command>postgres</command>
   communicating through the port 1234. In order to connect to this
   server using <application>psql</>, you would need to run it as
<screen>
<prompt>$</prompt> <userinput>psql -p 1234</userinput>
</screen>
   or set the environment variable <envar>PGPORT</envar>:
<screen>
<prompt>$</prompt> <userinput>export PGPORT=1234</userinput>
<prompt>$</prompt> <userinput>psql</userinput>
</screen>
  </para>

  <para>
   Named run-time parameters can be set in either of these styles:
<screen>
<prompt>$</prompt> <userinput>postgres -c work_mem=1234</userinput>
<prompt>$</prompt> <userinput>postgres --work-mem=1234</userinput>
</screen>
   Either form overrides whatever setting might exist for
   <varname>work_mem</> in <filename>postgresql.conf</>.  Notice that
   underscores in parameter names can be written as either underscore
   or dash on the command line.  Except for short-term experiments,
   it's probably better practice to edit the setting in
   <filename>postgresql.conf</> than to rely on a command-line switch
   to set a parameter.
  </para>
 </refsect1>

 <refsect1>
  <title>See Also</title>

  <para>
   <xref linkend="app-initdb">,
   <xref linkend="app-pg-ctl">
  </para>
 </refsect1>
</refentry>
