mirror of
https://github.com/postgres/postgres.git
synced 2025-05-02 11:44:50 +03:00
2970 lines
107 KiB
Plaintext
2970 lines
107 KiB
Plaintext
<!-- doc/src/sgml/installation.sgml -->
|
|
<!--
|
|
|
|
Use </link> not just </> so INSTALL.html can be created without links
|
|
to the main documentation. Don't use <xref>.
|
|
|
|
-->
|
|
|
|
<chapter id="installation">
|
|
<title><![%standalone-include[<productname>PostgreSQL</>]]>
|
|
Installation from Source Code</title>
|
|
|
|
<indexterm zone="installation">
|
|
<primary>installation</primary>
|
|
</indexterm>
|
|
|
|
<para>
|
|
This <![%standalone-include;[document]]>
|
|
<![%standalone-ignore;[chapter]]> describes the installation of
|
|
<productname>PostgreSQL</productname> using the source code
|
|
distribution. (If you are installing a pre-packaged distribution,
|
|
such as an RPM or Debian package, ignore this
|
|
<![%standalone-include;[document]]>
|
|
<![%standalone-ignore;[chapter]]>
|
|
and read the packager's instructions instead.)
|
|
</para>
|
|
|
|
<sect1 id="install-short">
|
|
<title>Short Version</title>
|
|
|
|
<para>
|
|
<synopsis>
|
|
./configure
|
|
gmake
|
|
su
|
|
gmake install
|
|
adduser postgres
|
|
mkdir /usr/local/pgsql/data
|
|
chown postgres /usr/local/pgsql/data
|
|
su - postgres
|
|
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
|
|
/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &
|
|
/usr/local/pgsql/bin/createdb test
|
|
/usr/local/pgsql/bin/psql test
|
|
</synopsis>
|
|
The long version is the rest of this
|
|
<![%standalone-include;[document.]]>
|
|
<![%standalone-ignore;[chapter.]]>
|
|
</para>
|
|
</sect1>
|
|
|
|
|
|
<sect1 id="install-requirements">
|
|
<title>Requirements</title>
|
|
|
|
<para>
|
|
In general, a modern Unix-compatible platform should be able to run
|
|
<productname>PostgreSQL</>.
|
|
The platforms that had received specific testing at the
|
|
time of release are listed in <xref linkend="supported-platforms">
|
|
below. In the <filename>doc</> subdirectory of the distribution
|
|
there are several platform-specific <acronym>FAQ</> documents you
|
|
might wish to consult if you are having trouble.
|
|
</para>
|
|
|
|
<para>
|
|
The following software packages are required for building
|
|
<productname>PostgreSQL</>:
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
<indexterm>
|
|
<primary>make</primary>
|
|
</indexterm>
|
|
|
|
<acronym>GNU</> <application>make</> version 3.80 or newer is required; other
|
|
<application>make</> programs or older <acronym>GNU</> <application>make</> versions will <emphasis>not</> work.
|
|
<acronym>GNU</> <application>make</> is often installed under
|
|
the name <filename>gmake</filename>; this document will always
|
|
refer to it by that name. (On some systems
|
|
<acronym>GNU</acronym> <application>make</> is the default tool with the name
|
|
<filename>make</>.) To test for <acronym>GNU</acronym>
|
|
<application>make</application> enter:
|
|
<screen>
|
|
<userinput>gmake --version</userinput>
|
|
</screen>
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
You need an <acronym>ISO</>/<acronym>ANSI</> C compiler (at least
|
|
C89-compliant). Recent
|
|
versions of <productname>GCC</> are recommended, but
|
|
<productname>PostgreSQL</> is known to build using a wide variety
|
|
of compilers from different vendors.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
<application>tar</> is required to unpack the source
|
|
distribution, in addition to either
|
|
<application>gzip</> or <application>bzip2</>.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
<indexterm>
|
|
<primary>readline</primary>
|
|
</indexterm>
|
|
<indexterm>
|
|
<primary>libedit</primary>
|
|
</indexterm>
|
|
|
|
The <acronym>GNU</> <productname>Readline</> library is used by
|
|
default. It allows <application>psql</application> (the
|
|
PostgreSQL command line SQL interpreter) to remember each
|
|
command you type, and allows you to use arrow keys to recall and
|
|
edit previous commands. This is very helpful and is strongly
|
|
recommended. If you don't want to use it then you must specify
|
|
the <option>--without-readline</option> option to
|
|
<filename>configure</>. As an alternative, you can often use the
|
|
BSD-licensed <filename>libedit</filename> library, originally
|
|
developed on <productname>NetBSD</productname>. The
|
|
<filename>libedit</filename> library is
|
|
GNU <productname>Readline</productname>-compatible and is used if
|
|
<filename>libreadline</filename> is not found, or if
|
|
<option>--with-libedit-preferred</option> is used as an
|
|
option to <filename>configure</>. If you are using a package-based
|
|
Linux distribution, be aware that you need both the
|
|
<literal>readline</> and <literal>readline-devel</> packages, if
|
|
those are separate in your distribution.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
<indexterm>
|
|
<primary>zlib</primary>
|
|
</indexterm>
|
|
|
|
The <productname>zlib</productname> compression library is
|
|
used by default. If you don't want to use it then you must
|
|
specify the <option>--without-zlib</option> option to
|
|
<filename>configure</filename>. Using this option disables
|
|
support for compressed archives in <application>pg_dump</> and
|
|
<application>pg_restore</>.
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
|
|
<para>
|
|
The following packages are optional. They are not required in the
|
|
default configuration, but they are needed when certain build
|
|
options are enabled, as explained below:
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
To build the server programming language
|
|
<application>PL/Perl</application> you need a full
|
|
<productname>Perl</productname> installation, including the
|
|
<filename>libperl</filename> library and the header files.
|
|
Since <application>PL/Perl</application> will be a shared
|
|
library, the <indexterm><primary>libperl</primary></indexterm>
|
|
<filename>libperl</filename> library must be a shared library
|
|
also on most platforms. This appears to be the default in
|
|
recent <productname>Perl</productname> versions, but it was not
|
|
in earlier versions, and in any case it is the choice of whomever
|
|
installed Perl at your site.
|
|
If you intend to make more than incidental use of
|
|
<application>PL/Perl</application>, you should ensure that the
|
|
<productname>Perl</productname> installation was built with the
|
|
<literal>usemultiplicity</> option enabled (<literal>perl -V</>
|
|
will show whether this is the case).
|
|
</para>
|
|
|
|
<para>
|
|
If you don't have the shared library but you need one, a message
|
|
like this will appear during the <productname>PostgreSQL</>
|
|
build to point out this fact:
|
|
<screen>
|
|
*** Cannot build PL/Perl because libperl is not a shared library.
|
|
*** You might have to rebuild your Perl installation. Refer to
|
|
*** the documentation for details.
|
|
</screen>
|
|
(If you don't follow the on-screen output you will merely notice
|
|
that the <application>PL/Perl</application> library object,
|
|
<filename>plperl.so</filename> or similar, will not be
|
|
installed.) If you see this, you will have to rebuild and
|
|
install <productname>Perl</productname> manually to be able to
|
|
build <application>PL/Perl</application>. During the
|
|
configuration process for <productname>Perl</productname>,
|
|
request a shared library.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
To build the <application>PL/Python</> server programming
|
|
language, you need a <productname>Python</productname>
|
|
installation with the header files and
|
|
the <application>distutils</application> module. The minimum
|
|
required version is <productname>Python</productname>
|
|
2.3. <productname>Python 3</productname> is supported if it's
|
|
version 3.1 or later; but see
|
|
<![%standalone-include[the <application>PL/Python</> documentation]]>
|
|
<![%standalone-ignore[<xref linkend="plpython-python23">]]>
|
|
when using Python 3.
|
|
</para>
|
|
|
|
<para>
|
|
Since <application>PL/Python</application> will be a shared
|
|
library, the <indexterm><primary>libpython</primary></indexterm>
|
|
<filename>libpython</filename> library must be a shared library
|
|
also on most platforms. This is not the case in a default
|
|
<productname>Python</productname> installation. If after
|
|
building and installing <productname>PostgreSQL</> you have a file called
|
|
<filename>plpython.so</filename> (possibly a different
|
|
extension), then everything went well. Otherwise you should
|
|
have seen a notice like this flying by:
|
|
<screen>
|
|
*** Cannot build PL/Python because libpython is not a shared library.
|
|
*** You might have to rebuild your Python installation. Refer to
|
|
*** the documentation for details.
|
|
</screen>
|
|
That means you have to rebuild (part of) your
|
|
<productname>Python</productname> installation to create this
|
|
shared library.
|
|
</para>
|
|
|
|
<para>
|
|
If you have problems, run <productname>Python</> 2.3 or later's
|
|
configure using the <literal>--enable-shared</> flag. On some
|
|
operating systems you don't have to build a shared library, but
|
|
you will have to convince the <productname>PostgreSQL</> build
|
|
system of this. Consult the <filename>Makefile</filename> in
|
|
the <filename>src/pl/plpython</filename> directory for details.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
To build the <application>PL/Tcl</application>
|
|
procedural language, you of course need a <productname>Tcl</>
|
|
installation. If you are using a pre-8.4 release of
|
|
<productname>Tcl</>, ensure that it was built without multithreading
|
|
support.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
To enable Native Language Support (<acronym>NLS</acronym>), that
|
|
is, the ability to display a program's messages in a language
|
|
other than English, you need an implementation of the
|
|
<application>Gettext</> <acronym>API</acronym>. Some operating
|
|
systems have this built-in (e.g., <systemitem
|
|
class="osname">Linux</>, <systemitem class="osname">NetBSD</>,
|
|
<systemitem class="osname">Solaris</>), for other systems you
|
|
can download an add-on package from <ulink
|
|
url="http://www.gnu.org/software/gettext/"></ulink>.
|
|
If you are using the <application>Gettext</> implementation in
|
|
the <acronym>GNU</acronym> C library then you will additionally
|
|
need the <productname>GNU Gettext</productname> package for some
|
|
utility programs. For any of the other implementations you will
|
|
not need it.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
You need <application>Kerberos</>, <productname>OpenSSL</>,
|
|
<productname>OpenLDAP</>, and/or
|
|
<application>PAM</>, if you want to support authentication or
|
|
encryption using those services.
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
|
|
<para>
|
|
If you are building from a <productname>Git</productname> tree instead of
|
|
using a released source package, or if you want to do server development,
|
|
you also need the following packages:
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
<indexterm>
|
|
<primary>flex</primary>
|
|
</indexterm>
|
|
<indexterm>
|
|
<primary>lex</primary>
|
|
</indexterm>
|
|
<indexterm>
|
|
<primary>bison</primary>
|
|
</indexterm>
|
|
<indexterm>
|
|
<primary>yacc</primary>
|
|
</indexterm>
|
|
|
|
GNU <application>Flex</> and <application>Bison</>
|
|
are needed to build from a Git checkout, or if you changed the actual
|
|
scanner and parser definition files. If you need them, be sure
|
|
to get <application>Flex</> 2.5.31 or later and
|
|
<application>Bison</> 1.875 or later. Other <application>lex</>
|
|
and <application>yacc</> programs cannot be used.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<indexterm>
|
|
<primary>perl</primary>
|
|
</indexterm>
|
|
|
|
<application>Perl</> 5.8 or later is needed to build from a Git checkout,
|
|
or if you changed the input files for any of the build steps that
|
|
use Perl scripts. If building on Windows you will need
|
|
<application>Perl</> in any case.
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
|
|
<para>
|
|
If you need to get a <acronym>GNU</acronym> package, you can find
|
|
it at your local <acronym>GNU</acronym> mirror site (see <ulink
|
|
url="http://www.gnu.org/order/ftp.html"></>
|
|
for a list) or at <ulink
|
|
url="ftp://ftp.gnu.org/gnu/"></ulink>.
|
|
</para>
|
|
|
|
<para>
|
|
Also check that you have sufficient disk space. You will need about
|
|
100 MB for the source tree during compilation and about 20 MB for
|
|
the installation directory. An empty database cluster takes about
|
|
35 MB; databases take about five times the amount of space that a
|
|
flat text file with the same data would take. If you are going to
|
|
run the regression tests you will temporarily need up to an extra
|
|
150 MB. Use the <command>df</command> command to check free disk
|
|
space.
|
|
</para>
|
|
</sect1>
|
|
|
|
<![%standalone-ignore;[
|
|
<sect1 id="install-getsource">
|
|
<title>Getting The Source</title>
|
|
|
|
<para>
|
|
The <productname>PostgreSQL</> &version; sources can be obtained by
|
|
anonymous FTP from <ulink
|
|
url="ftp://ftp.postgresql.org/pub/source/v&version;/postgresql-&version;.tar.gz"></ulink>.
|
|
Other download options can be found on our website:
|
|
<ulink url="http://www.postgresql.org/download/"></ulink>. After you
|
|
have obtained the file, unpack it:
|
|
<screen>
|
|
<userinput>gunzip postgresql-&version;.tar.gz</userinput>
|
|
<userinput>tar xf postgresql-&version;.tar</userinput>
|
|
</screen>
|
|
This will create a directory
|
|
<filename>postgresql-&version;</filename> under the current directory
|
|
with the <productname>PostgreSQL</> sources.
|
|
Change into that directory for the rest
|
|
of the installation procedure.
|
|
</para>
|
|
|
|
<para>
|
|
You can also get the source directly from the version control repository, see
|
|
<xref linkend="sourcerepo">.
|
|
</para>
|
|
</sect1>
|
|
]]>
|
|
|
|
<sect1 id="install-procedure">
|
|
<title>Installation Procedure</title>
|
|
|
|
<procedure>
|
|
|
|
<step id="configure">
|
|
<title>Configuration</title>
|
|
|
|
<indexterm zone="configure">
|
|
<primary>configure</primary>
|
|
</indexterm>
|
|
|
|
<para>
|
|
The first step of the installation procedure is to configure the
|
|
source tree for your system and choose the options you would like.
|
|
This is done by running the <filename>configure</> script. For a
|
|
default installation simply enter:
|
|
<screen>
|
|
<userinput>./configure</userinput>
|
|
</screen>
|
|
This script will run a number of tests to determine values for various
|
|
system dependent variables and detect any quirks of your
|
|
operating system, and finally will create several files in the
|
|
build tree to record what it found. You can also run
|
|
<filename>configure</filename> in a directory outside the source
|
|
tree, if you want to keep the build directory separate. This
|
|
procedure is also called a
|
|
<indexterm><primary>VPATH</primary></indexterm><firstterm>VPATH</firstterm>
|
|
build. Here's how:
|
|
<screen>
|
|
<userinput>mkdir build_dir</userinput>
|
|
<userinput>cd build_dir</userinput>
|
|
<userinput>/path/to/source/tree/configure [options go here]</userinput>
|
|
<userinput>gmake</userinput>
|
|
</screen>
|
|
</para>
|
|
|
|
<para>
|
|
The default configuration will build the server and utilities, as
|
|
well as all client applications and interfaces that require only a
|
|
C compiler. All files will be installed under
|
|
<filename>/usr/local/pgsql</> by default.
|
|
</para>
|
|
|
|
<para>
|
|
You can customize the build and installation process by supplying one
|
|
or more of the following command line options to
|
|
<filename>configure</filename>:
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><option>--prefix=<replaceable>PREFIX</></option></term>
|
|
<listitem>
|
|
<para>
|
|
Install all files under the directory <replaceable>PREFIX</>
|
|
instead of <filename>/usr/local/pgsql</filename>. The actual
|
|
files will be installed into various subdirectories; no files
|
|
will ever be installed directly into the
|
|
<replaceable>PREFIX</> directory.
|
|
</para>
|
|
|
|
<para>
|
|
If you have special needs, you can also customize the
|
|
individual subdirectories with the following options. However,
|
|
if you leave these with their defaults, the installation will be
|
|
relocatable, meaning you can move the directory after
|
|
installation. (The <literal>man</> and <literal>doc</>
|
|
locations are not affected by this.)
|
|
</para>
|
|
|
|
<para>
|
|
For relocatable installs, you might want to use
|
|
<filename>configure</filename>'s <literal>--disable-rpath</>
|
|
option. Also, you will need to tell the operating system how
|
|
to find the shared libraries.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--exec-prefix=<replaceable>EXEC-PREFIX</></option></term>
|
|
<listitem>
|
|
<para>
|
|
You can install architecture-dependent files under a
|
|
different prefix, <replaceable>EXEC-PREFIX</>, than what
|
|
<replaceable>PREFIX</> was set to. This can be useful to
|
|
share architecture-independent files between hosts. If you
|
|
omit this, then <replaceable>EXEC-PREFIX</> is set equal to
|
|
<replaceable>PREFIX</> and both architecture-dependent and
|
|
independent files will be installed under the same tree,
|
|
which is probably what you want.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--bindir=<replaceable>DIRECTORY</></option></term>
|
|
<listitem>
|
|
<para>
|
|
Specifies the directory for executable programs. The default
|
|
is <filename><replaceable>EXEC-PREFIX</>/bin</>, which
|
|
normally means <filename>/usr/local/pgsql/bin</>.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--sysconfdir=<replaceable>DIRECTORY</></option></term>
|
|
<listitem>
|
|
<para>
|
|
Sets the directory for various configuration files,
|
|
<filename><replaceable>PREFIX</>/etc</> by default.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--libdir=<replaceable>DIRECTORY</></option></term>
|
|
<listitem>
|
|
<para>
|
|
Sets the location to install libraries and dynamically loadable
|
|
modules. The default is
|
|
<filename><replaceable>EXEC-PREFIX</>/lib</>.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--includedir=<replaceable>DIRECTORY</></option></term>
|
|
<listitem>
|
|
<para>
|
|
Sets the directory for installing C and C++ header files. The
|
|
default is <filename><replaceable>PREFIX</>/include</>.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--datarootdir=<replaceable>DIRECTORY</></option></term>
|
|
<listitem>
|
|
<para>
|
|
Sets the root directory for various types of read-only data
|
|
files. This only sets the default for some of the following
|
|
options. The default is
|
|
<filename><replaceable>PREFIX</>/share</>.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--datadir=<replaceable>DIRECTORY</></option></term>
|
|
<listitem>
|
|
<para>
|
|
Sets the directory for read-only data files used by the
|
|
installed programs. The default is
|
|
<filename><replaceable>DATAROOTDIR</></>. Note that this has
|
|
nothing to do with where your database files will be placed.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--localedir=<replaceable>DIRECTORY</></option></term>
|
|
<listitem>
|
|
<para>
|
|
Sets the directory for installing locale data, in particular
|
|
message translation catalog files. The default is
|
|
<filename><replaceable>DATAROOTDIR</>/locale</>.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--mandir=<replaceable>DIRECTORY</></option></term>
|
|
<listitem>
|
|
<para>
|
|
The man pages that come with <productname>PostgreSQL</> will be installed under
|
|
this directory, in their respective
|
|
<filename>man<replaceable>x</></> subdirectories.
|
|
The default is <filename><replaceable>DATAROOTDIR</>/man</>.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--docdir=<replaceable>DIRECTORY</></option></term>
|
|
<listitem>
|
|
<para>
|
|
Sets the root directory for installing documentation files,
|
|
except <quote>man</> pages. This only sets the default for
|
|
the following options. The default value for this option is
|
|
<filename><replaceable>DATAROOTDIR</>/doc/postgresql</>.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--htmldir=<replaceable>DIRECTORY</></option></term>
|
|
<listitem>
|
|
<para>
|
|
The HTML-formatted documentation for
|
|
<productname>PostgreSQL</productname> will be installed under
|
|
this directory. The default is
|
|
<filename><replaceable>DATAROOTDIR</></>.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
|
|
<note>
|
|
<para>
|
|
Care has been taken to make it possible to install
|
|
<productname>PostgreSQL</> into shared installation locations
|
|
(such as <filename>/usr/local/include</filename>) without
|
|
interfering with the namespace of the rest of the system. First,
|
|
the string <quote><literal>/postgresql</literal></quote> is
|
|
automatically appended to <varname>datadir</varname>,
|
|
<varname>sysconfdir</varname>, and <varname>docdir</varname>,
|
|
unless the fully expanded directory name already contains the
|
|
string <quote><literal>postgres</></quote> or
|
|
<quote><literal>pgsql</></quote>. For example, if you choose
|
|
<filename>/usr/local</filename> as prefix, the documentation will
|
|
be installed in <filename>/usr/local/doc/postgresql</filename>,
|
|
but if the prefix is <filename>/opt/postgres</filename>, then it
|
|
will be in <filename>/opt/postgres/doc</filename>. The public C
|
|
header files of the client interfaces are installed into
|
|
<varname>includedir</varname> and are namespace-clean. The
|
|
internal header files and the server header files are installed
|
|
into private directories under <varname>includedir</varname>. See
|
|
the documentation of each interface for information about how to
|
|
access its header files. Finally, a private subdirectory will
|
|
also be created, if appropriate, under <varname>libdir</varname>
|
|
for dynamically loadable modules.
|
|
</para>
|
|
</note>
|
|
</para>
|
|
|
|
<para>
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><option>--with-includes=<replaceable>DIRECTORIES</></option></term>
|
|
<listitem>
|
|
<para>
|
|
<replaceable>DIRECTORIES</> is a colon-separated list of
|
|
directories that will be added to the list the compiler
|
|
searches for header files. If you have optional packages
|
|
(such as GNU <application>Readline</>) installed in a non-standard
|
|
location,
|
|
you have to use this option and probably also the corresponding
|
|
<option>--with-libraries</> option.
|
|
</para>
|
|
<para>
|
|
Example: <literal>--with-includes=/opt/gnu/include:/usr/sup/include</>.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--with-libraries=<replaceable>DIRECTORIES</></option></term>
|
|
<listitem>
|
|
<para>
|
|
<replaceable>DIRECTORIES</> is a colon-separated list of
|
|
directories to search for libraries. You will probably have
|
|
to use this option (and the corresponding
|
|
<option>--with-includes</> option) if you have packages
|
|
installed in non-standard locations.
|
|
</para>
|
|
<para>
|
|
Example: <literal>--with-libraries=/opt/gnu/lib:/usr/sup/lib</>.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--enable-nls<optional>=<replaceable>LANGUAGES</replaceable></optional></option></term>
|
|
<listitem>
|
|
<para>
|
|
Enables Native Language Support (<acronym>NLS</acronym>),
|
|
that is, the ability to display a program's messages in a
|
|
language other than English.
|
|
<replaceable>LANGUAGES</replaceable> is an optional space-separated
|
|
list of codes of the languages that you want supported, for
|
|
example <literal>--enable-nls='de fr'</>. (The intersection
|
|
between your list and the set of actually provided
|
|
translations will be computed automatically.) If you do not
|
|
specify a list, then all available translations are
|
|
installed.
|
|
</para>
|
|
|
|
<para>
|
|
To use this option, you will need an implementation of the
|
|
<application>Gettext</> API; see above.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--with-pgport=<replaceable>NUMBER</></option></term>
|
|
<listitem>
|
|
<para>
|
|
Set <replaceable>NUMBER</> as the default port number for
|
|
server and clients. The default is 5432. The port can always
|
|
be changed later on, but if you specify it here then both
|
|
server and clients will have the same default compiled in,
|
|
which can be very convenient. Usually the only good reason
|
|
to select a non-default value is if you intend to run multiple
|
|
<productname>PostgreSQL</> servers on the same machine.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--with-perl</option></term>
|
|
<listitem>
|
|
<para>
|
|
Build the <application>PL/Perl</> server-side language.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--with-python</option></term>
|
|
<listitem>
|
|
<para>
|
|
Build the <application>PL/Python</> server-side language.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--with-tcl</option></term>
|
|
<listitem>
|
|
<para>
|
|
Build the <application>PL/Tcl</> server-side language.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--with-tclconfig=<replaceable>DIRECTORY</replaceable></option></term>
|
|
<listitem>
|
|
<para>
|
|
Tcl installs the file <filename>tclConfig.sh</filename>, which
|
|
contains configuration information needed to build modules
|
|
interfacing to Tcl. This file is normally found automatically
|
|
at a well-known location, but if you want to use a different
|
|
version of Tcl you can specify the directory in which to look
|
|
for it.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--with-gssapi</option></term>
|
|
<listitem>
|
|
<para>
|
|
Build with support for GSSAPI authentication. On many
|
|
systems, the GSSAPI (usually a part of the Kerberos installation)
|
|
system is not installed in a location
|
|
that is searched by default (e.g., <filename>/usr/include</>,
|
|
<filename>/usr/lib</>), so you must use the options
|
|
<option>--with-includes</> and <option>--with-libraries</> in
|
|
addition to this option. <filename>configure</> will check
|
|
for the required header files and libraries to make sure that
|
|
your GSSAPI installation is sufficient before proceeding.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--with-krb5</option></term>
|
|
<listitem>
|
|
<para>
|
|
Build with support for Kerberos 5 authentication. On many
|
|
systems, the Kerberos system is not installed in a location
|
|
that is searched by default (e.g., <filename>/usr/include</>,
|
|
<filename>/usr/lib</>), so you must use the options
|
|
<option>--with-includes</> and <option>--with-libraries</> in
|
|
addition to this option. <filename>configure</> will check
|
|
for the required header files and libraries to make sure that
|
|
your Kerberos installation is sufficient before proceeding.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--with-krb-srvnam=<replaceable>NAME</></option></term>
|
|
<listitem>
|
|
<para>
|
|
The default name of the Kerberos service principal (also used
|
|
by GSSAPI).
|
|
<literal>postgres</literal> is the default. There's usually no
|
|
reason to change this unless you have a Windows environment,
|
|
in which case it must be set to upper case
|
|
<literal>POSTGRES</literal>.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<indexterm>
|
|
<primary>OpenSSL</primary>
|
|
<seealso>SSL</seealso>
|
|
</indexterm>
|
|
|
|
<term><option>--with-openssl</option></term>
|
|
<listitem>
|
|
<para>
|
|
Build with support for <acronym>SSL</> (encrypted)
|
|
connections. This requires the <productname>OpenSSL</>
|
|
package to be installed. <filename>configure</> will check
|
|
for the required header files and libraries to make sure that
|
|
your <productname>OpenSSL</> installation is sufficient
|
|
before proceeding.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--with-pam</option></term>
|
|
<listitem>
|
|
<para>
|
|
Build with <acronym>PAM</><indexterm><primary>PAM</></>
|
|
(Pluggable Authentication Modules) support.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--with-ldap</option></term>
|
|
<listitem>
|
|
<para>
|
|
Build with <acronym>LDAP</><indexterm><primary>LDAP</></>
|
|
support for authentication and connection parameter lookup (see
|
|
<![%standalone-include[the documentation about client authentication
|
|
and libpq]]><![%standalone-ignore[<xref linkend="libpq-ldap"> and
|
|
<xref linkend="auth-ldap">]]> for more information). On Unix,
|
|
this requires the <productname>OpenLDAP</> package to be
|
|
installed. On Windows, the default <productname>WinLDAP</>
|
|
library is used. <filename>configure</> will check for the required
|
|
header files and libraries to make sure that your
|
|
<productname>OpenLDAP</> installation is sufficient before
|
|
proceeding.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--without-readline</option></term>
|
|
<listitem>
|
|
<para>
|
|
Prevents use of the <application>Readline</> library
|
|
(and <application>libedit</> as well). This option disables
|
|
command-line editing and history in
|
|
<application>psql</application>, so it is not recommended.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--with-libedit-preferred</option></term>
|
|
<listitem>
|
|
<para>
|
|
Favors the use of the BSD-licensed <application>libedit</> library
|
|
rather than GPL-licensed <application>Readline</>. This option
|
|
is significant only if you have both libraries installed; the
|
|
default in that case is to use <application>Readline</>.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--with-bonjour</option></term>
|
|
<listitem>
|
|
<para>
|
|
Build with Bonjour support. This requires Bonjour support
|
|
in your operating system. Recommended on Mac OS X.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--with-ossp-uuid</option></term>
|
|
<listitem>
|
|
<para>
|
|
Build components using the <ulink
|
|
url="http://www.ossp.org/pkg/lib/uuid/">OSSP UUID
|
|
library</ulink>. Specifically, build the
|
|
<![%standalone-include[uuid-ossp]]>
|
|
<![%standalone-ignore[<xref linkend="uuid-ossp">]]> module,
|
|
which provides functions to generate
|
|
UUIDs.<indexterm><primary>UUID</primary></indexterm>
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--with-libxml</option></term>
|
|
<listitem>
|
|
<para>
|
|
Build with libxml (enables SQL/XML support). Libxml version 2.6.23 or
|
|
later is required for this feature.
|
|
</para>
|
|
|
|
<para>
|
|
Libxml installs a program <command>xml2-config</command> that
|
|
can be used to detect the required compiler and linker
|
|
options. PostgreSQL will use it automatically if found. To
|
|
specify a libxml installation at an unusual location, you can
|
|
either set the environment variable
|
|
<envar>XML2_CONFIG</envar> to point to the
|
|
<command>xml2-config</command> program belonging to the
|
|
installation, or use the options
|
|
<option>--with-includes</option> and
|
|
<option>--with-libraries</option>.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--with-libxslt</option></term>
|
|
<listitem>
|
|
<para>
|
|
Use libxslt when building the
|
|
<![%standalone-include[xml2]]>
|
|
<![%standalone-ignore[<xref linkend="xml2">]]>
|
|
module. <application>xml2</> relies on this library
|
|
to perform XSL transformations of XML.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--disable-integer-datetimes</option></term>
|
|
<listitem>
|
|
<para>
|
|
Disable support for 64-bit integer storage for timestamps and
|
|
intervals, and store datetime values as floating-point
|
|
numbers instead. Floating-point datetime storage was the
|
|
default in <productname>PostgreSQL</productname> releases
|
|
prior to 8.4, but it is now deprecated, because it does not
|
|
support microsecond precision for the full range of
|
|
<type>timestamp</type> values. However, integer-based
|
|
datetime storage requires a 64-bit integer type. Therefore,
|
|
this option can be used when no such type is available, or
|
|
for compatibility with applications written for prior
|
|
versions of <productname>PostgreSQL</productname>. See
|
|
<![%standalone-include[the documentation about datetime datatypes]]>
|
|
<![%standalone-ignore[<xref linkend="datatype-datetime">]]>
|
|
for more information.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--disable-float4-byval</option></term>
|
|
<listitem>
|
|
<para>
|
|
Disable passing float4 values <quote>by value</>, causing them
|
|
to be passed <quote>by reference</> instead. This option costs
|
|
performance, but may be needed for compatibility with old
|
|
user-defined functions that are written in C and use the
|
|
<quote>version 0</> calling convention. A better long-term
|
|
solution is to update any such functions to use the
|
|
<quote>version 1</> calling convention.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--disable-float8-byval</option></term>
|
|
<listitem>
|
|
<para>
|
|
Disable passing float8 values <quote>by value</>, causing them
|
|
to be passed <quote>by reference</> instead. This option costs
|
|
performance, but may be needed for compatibility with old
|
|
user-defined functions that are written in C and use the
|
|
<quote>version 0</> calling convention. A better long-term
|
|
solution is to update any such functions to use the
|
|
<quote>version 1</> calling convention.
|
|
Note that this option affects not only float8, but also int8 and some
|
|
related types such as timestamp.
|
|
On 32-bit platforms, <option>--disable-float8-byval</> is the default
|
|
and it is not allowed to select <option>--enable-float8-byval</>.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--with-segsize=<replaceable>SEGSIZE</replaceable></option></term>
|
|
<listitem>
|
|
<para>
|
|
Set the <firstterm>segment size</>, in gigabytes. Large tables are
|
|
divided into multiple operating-system files, each of size equal
|
|
to the segment size. This avoids problems with file size limits
|
|
that exist on many platforms. The default segment size, 1 gigabyte,
|
|
is safe on all supported platforms. If your operating system has
|
|
<quote>largefile</> support (which most do, nowadays), you can use
|
|
a larger segment size. This can be helpful to reduce the number of
|
|
file descriptors consumed when working with very large tables.
|
|
But be careful not to select a value larger than is supported
|
|
by your platform and the file systems you intend to use. Other
|
|
tools you might wish to use, such as <application>tar</>, could
|
|
also set limits on the usable file size.
|
|
It is recommended, though not absolutely required, that this value
|
|
be a power of 2.
|
|
Note that changing this value requires an initdb.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--with-blocksize=<replaceable>BLOCKSIZE</replaceable></option></term>
|
|
<listitem>
|
|
<para>
|
|
Set the <firstterm>block size</>, in kilobytes. This is the unit
|
|
of storage and I/O within tables. The default, 8 kilobytes,
|
|
is suitable for most situations; but other values may be useful
|
|
in special cases.
|
|
The value must be a power of 2 between 1 and 32 (kilobytes).
|
|
Note that changing this value requires an initdb.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--with-wal-segsize=<replaceable>SEGSIZE</replaceable></option></term>
|
|
<listitem>
|
|
<para>
|
|
Set the <firstterm>WAL segment size</>, in megabytes. This is
|
|
the size of each individual file in the WAL log. It may be useful
|
|
to adjust this size to control the granularity of WAL log shipping.
|
|
The default size is 16 megabytes.
|
|
The value must be a power of 2 between 1 and 64 (megabytes).
|
|
Note that changing this value requires an initdb.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--with-wal-blocksize=<replaceable>BLOCKSIZE</replaceable></option></term>
|
|
<listitem>
|
|
<para>
|
|
Set the <firstterm>WAL block size</>, in kilobytes. This is the unit
|
|
of storage and I/O within the WAL log. The default, 8 kilobytes,
|
|
is suitable for most situations; but other values may be useful
|
|
in special cases.
|
|
The value must be a power of 2 between 1 and 64 (kilobytes).
|
|
Note that changing this value requires an initdb.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--disable-spinlocks</option></term>
|
|
<listitem>
|
|
<para>
|
|
Allow the build to succeed even if <productname>PostgreSQL</>
|
|
has no CPU spinlock support for the platform. The lack of
|
|
spinlock support will result in poor performance; therefore,
|
|
this option should only be used if the build aborts and
|
|
informs you that the platform lacks spinlock support. If this
|
|
option is required to build <productname>PostgreSQL</> on
|
|
your platform, please report the problem to the
|
|
<productname>PostgreSQL</> developers.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--disable-thread-safety</option></term>
|
|
<listitem>
|
|
<para>
|
|
Disable the thread-safety of client libraries. This prevents
|
|
concurrent threads in <application>libpq</application> and
|
|
<application>ECPG</application> programs from safely controlling
|
|
their private connection handles.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--with-system-tzdata=<replaceable>DIRECTORY</replaceable></option></term>
|
|
<indexterm>
|
|
<primary>time zone data</primary>
|
|
</indexterm>
|
|
<listitem>
|
|
<para>
|
|
<productname>PostgreSQL</> includes its own time zone database,
|
|
which it requires for date and time operations. This time zone
|
|
database is in fact compatible with the IANA time zone
|
|
database provided by many operating systems such as FreeBSD,
|
|
Linux, and Solaris, so it would be redundant to install it again.
|
|
When this option is used, the system-supplied time zone database
|
|
in <replaceable>DIRECTORY</replaceable> is used instead of the one
|
|
included in the PostgreSQL source distribution.
|
|
<replaceable>DIRECTORY</replaceable> must be specified as an
|
|
absolute path. <filename>/usr/share/zoneinfo</filename> is a
|
|
likely directory on some operating systems. Note that the
|
|
installation routine will not detect mismatching or erroneous time
|
|
zone data. If you use this option, you are advised to run the
|
|
regression tests to verify that the time zone data you have
|
|
pointed to works correctly with <productname>PostgreSQL</>.
|
|
</para>
|
|
|
|
<indexterm><primary>cross compilation</primary></indexterm>
|
|
|
|
<para>
|
|
This option is mainly aimed at binary package distributors
|
|
who know their target operating system well. The main
|
|
advantage of using this option is that the PostgreSQL package
|
|
won't need to be upgraded whenever any of the many local
|
|
daylight-saving time rules change. Another advantage is that
|
|
PostgreSQL can be cross-compiled more straightforwardly if the
|
|
time zone database files do not need to be built during the
|
|
installation.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--without-zlib</option></term>
|
|
<listitem>
|
|
<para>
|
|
<indexterm>
|
|
<primary>zlib</primary>
|
|
</indexterm>
|
|
Prevents use of the <application>Zlib</> library. This disables
|
|
support for compressed archives in <application>pg_dump</application>
|
|
and <application>pg_restore</application>.
|
|
This option is only intended for those rare systems where this
|
|
library is not available.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--enable-debug</option></term>
|
|
<listitem>
|
|
<para>
|
|
Compiles all programs and libraries with debugging symbols.
|
|
This means that you can run the programs in a debugger
|
|
to analyze problems. This enlarges the size of the installed
|
|
executables considerably, and on non-GCC compilers it usually
|
|
also disables compiler optimization, causing slowdowns. However,
|
|
having the symbols available is extremely helpful for dealing
|
|
with any problems that might arise. Currently, this option is
|
|
recommended for production installations only if you use GCC.
|
|
But you should always have it on if you are doing development work
|
|
or running a beta version.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--enable-coverage</option></term>
|
|
<listitem>
|
|
<para>
|
|
If using GCC, all programs and libraries are compiled with
|
|
code coverage testing instrumentation. When run, they
|
|
generate files in the build directory with code coverage
|
|
metrics.
|
|
<![%standalone-ignore[See <xref linkend="regress-coverage">
|
|
for more information.]]> This option is for use only with GCC
|
|
and when doing development work.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--enable-profiling</option></term>
|
|
<listitem>
|
|
<para>
|
|
If using GCC, all programs and libraries are compiled so they
|
|
can be profiled. On backend exit, a subdirectory will be created
|
|
that contains the <filename>gmon.out</> file for use in profiling.
|
|
This option is for use only with GCC and when doing development work.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--enable-cassert</option></term>
|
|
<listitem>
|
|
<para>
|
|
Enables <firstterm>assertion</> checks in the server, which test for
|
|
many <quote>cannot happen</> conditions. This is invaluable for
|
|
code development purposes, but the tests can slow down the
|
|
server significantly.
|
|
Also, having the tests turned on won't necessarily enhance the
|
|
stability of your server! The assertion checks are not categorized
|
|
for severity, and so what might be a relatively harmless bug will
|
|
still lead to server restarts if it triggers an assertion
|
|
failure. This option is not recommended for production use, but
|
|
you should have it on for development work or when running a beta
|
|
version.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--enable-depend</option></term>
|
|
<listitem>
|
|
<para>
|
|
Enables automatic dependency tracking. With this option, the
|
|
makefiles are set up so that all affected object files will
|
|
be rebuilt when any header file is changed. This is useful
|
|
if you are doing development work, but is just wasted overhead
|
|
if you intend only to compile once and install. At present,
|
|
this option only works with GCC.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--enable-dtrace</option></term>
|
|
<listitem>
|
|
<para>
|
|
<indexterm>
|
|
<primary>DTrace</primary>
|
|
</indexterm>
|
|
Compiles <productname>PostgreSQL</productname> with support for the
|
|
dynamic tracing tool DTrace.
|
|
<![%standalone-ignore[See <xref linkend="dynamic-trace">
|
|
for more information.]]>
|
|
</para>
|
|
|
|
<para>
|
|
To point to the <command>dtrace</command> program, the
|
|
environment variable <envar>DTRACE</envar> can be set. This
|
|
will often be necessary because <command>dtrace</command> is
|
|
typically installed under <filename>/usr/sbin</filename>,
|
|
which might not be in the path.
|
|
</para>
|
|
|
|
<para>
|
|
Extra command-line options for the <command>dtrace</command> program
|
|
can be specified in the environment variable
|
|
<envar>DTRACEFLAGS</envar>. On Solaris,
|
|
to include DTrace support in a 64-bit binary, you must specify
|
|
<literal>DTRACEFLAGS="-64"</> to configure. For example,
|
|
using the GCC compiler:
|
|
<screen>
|
|
./configure CC='gcc -m64' --enable-dtrace DTRACEFLAGS='-64' ...
|
|
</screen>
|
|
Using Sun's compiler:
|
|
<screen>
|
|
./configure CC='/opt/SUNWspro/bin/cc -xtarget=native64' --enable-dtrace DTRACEFLAGS='-64' ...
|
|
</screen>
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
</variablelist>
|
|
</para>
|
|
|
|
<para>
|
|
If you prefer a C compiler different from the one
|
|
<filename>configure</filename> picks, you can set the
|
|
environment variable <envar>CC</> to the program of your choice.
|
|
By default, <filename>configure</filename> will pick
|
|
<filename>gcc</filename> if available, else the platform's
|
|
default (usually <filename>cc</>). Similarly, you can override the
|
|
default compiler flags if needed with the <envar>CFLAGS</envar> variable.
|
|
</para>
|
|
|
|
<para>
|
|
You can specify environment variables on the
|
|
<filename>configure</filename> command line, for example:
|
|
<screen>
|
|
<userinput>./configure CC=/opt/bin/gcc CFLAGS='-O2 -pipe'</>
|
|
</screen>
|
|
</para>
|
|
|
|
<para>
|
|
Here is a list of the significant variables that can be set in
|
|
this manner:
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><envar>BISON</envar></term>
|
|
<listitem>
|
|
<para>
|
|
Bison program
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><envar>CC</envar></term>
|
|
<listitem>
|
|
<para>
|
|
C compiler
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><envar>CFLAGS</envar></term>
|
|
<listitem>
|
|
<para>
|
|
options to pass to the C compiler
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><envar>CPP</envar></term>
|
|
<listitem>
|
|
<para>
|
|
C preprocessor
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><envar>CPPFLAGS</envar></term>
|
|
<listitem>
|
|
<para>
|
|
options to pass to the C preprocessor
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><envar>DTRACE</envar></term>
|
|
<listitem>
|
|
<para>
|
|
location of the <command>dtrace</command> program
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><envar>DTRACEFLAGS</envar></term>
|
|
<listitem>
|
|
<para>
|
|
options to pass to the <command>dtrace</command> program
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><envar>FLEX</envar></term>
|
|
<listitem>
|
|
<para>
|
|
Flex program
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><envar>LDFLAGS</envar></term>
|
|
<listitem>
|
|
<para>
|
|
options to use when linking either executables or shared libraries
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><envar>LDFLAGS_EX</envar></term>
|
|
<listitem>
|
|
<para>
|
|
additional options for linking executables only
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><envar>LDFLAGS_SL</envar></term>
|
|
<listitem>
|
|
<para>
|
|
additional options for linking shared libraries only
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><envar>MSGFMT</envar></term>
|
|
<listitem>
|
|
<para>
|
|
<command>msgfmt</command> program for native language support
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><envar>PERL</envar></term>
|
|
<listitem>
|
|
<para>
|
|
Full path to the Perl interpreter. This will be used to
|
|
determine the dependencies for building PL/Perl.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><envar>PYTHON</envar></term>
|
|
<listitem>
|
|
<para>
|
|
Full path to the Python interpreter. This will be used to
|
|
determine the dependencies for building PL/Python. Also,
|
|
whether Python 2 or 3 is specified here (or otherwise
|
|
implicitly chosen) determines which variant of the PL/Python
|
|
language becomes available. See
|
|
<![%standalone-include[the <application>PL/Python</>
|
|
documentation]]>
|
|
<![%standalone-ignore[<xref linkend="plpython-python23">]]>
|
|
for more information.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><envar>TCLSH</envar></term>
|
|
<listitem>
|
|
<para>
|
|
Full path to the Tcl interpreter. This will be used to
|
|
determine the dependencies for building PL/Tcl, and it will
|
|
be substituted into Tcl scripts.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><envar>XML2_CONFIG</envar></term>
|
|
<listitem>
|
|
<para>
|
|
<command>xml2-config</command> program used to locate the
|
|
libxml installation.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</para>
|
|
|
|
<note>
|
|
<para>
|
|
When developing code inside the server, it is recommended to
|
|
use the configure options <option>--enable-cassert</> (which
|
|
turns on many run-time error checks) and <option>--enable-debug</>
|
|
(which improves the usefulness of debugging tools).
|
|
</para>
|
|
|
|
<para>
|
|
If using GCC, it is best to build with an optimization level of
|
|
at least <option>-O1</>, because using no optimization
|
|
(<option>-O0</>) disables some important compiler warnings (such
|
|
as the use of uninitialized variables). However, non-zero
|
|
optimization levels can complicate debugging because stepping
|
|
through compiled code will usually not match up one-to-one with
|
|
source code lines. If you get confused while trying to debug
|
|
optimized code, recompile the specific files of interest with
|
|
<option>-O0</>. An easy way to do this is by passing an option
|
|
to <application>make</>: <command>gmake PROFILE=-O0 file.o</>.
|
|
</para>
|
|
</note>
|
|
</step>
|
|
|
|
<step id="build">
|
|
<title>Build</title>
|
|
|
|
<para>
|
|
To start the build, type:
|
|
<screen>
|
|
<userinput>gmake</userinput>
|
|
</screen>
|
|
(Remember to use <acronym>GNU</> <application>make</>.) The build
|
|
will take a few minutes depending on your
|
|
hardware. The last line displayed should be:
|
|
<screen>
|
|
All of PostgreSQL is successfully made. Ready to install.
|
|
</screen>
|
|
</para>
|
|
|
|
<para>
|
|
If you want to build everything that can be built, including the
|
|
documentation (HTML and man pages), and the additional modules
|
|
(<filename>contrib</filename>), type instead:
|
|
<screen>
|
|
<userinput>gmake world</userinput>
|
|
</screen>
|
|
The last line displayed should be:
|
|
<screen>
|
|
PostgreSQL, contrib and HTML documentation successfully made. Ready to install.
|
|
</screen>
|
|
</para>
|
|
</step>
|
|
|
|
<step>
|
|
<title>Regression Tests</title>
|
|
|
|
<indexterm>
|
|
<primary>regression test</primary>
|
|
</indexterm>
|
|
|
|
<para>
|
|
If you want to test the newly built server before you install it,
|
|
you can run the regression tests at this point. The regression
|
|
tests are a test suite to verify that <productname>PostgreSQL</>
|
|
runs on your machine in the way the developers expected it
|
|
to. Type:
|
|
<screen>
|
|
<userinput>gmake check</userinput>
|
|
</screen>
|
|
(This won't work as root; do it as an unprivileged user.)
|
|
<![%standalone-include[The file
|
|
<filename>src/test/regress/README</> and the
|
|
documentation contain]]>
|
|
<![%standalone-ignore[<xref linkend="regress"> contains]]>
|
|
detailed information about interpreting the test results. You can
|
|
repeat this test at any later time by issuing the same command.
|
|
</para>
|
|
</step>
|
|
|
|
<step id="install">
|
|
<title>Installing the Files</title>
|
|
|
|
<note>
|
|
<para>
|
|
If you are upgrading an existing system be sure to read
|
|
<![%standalone-include[the documentation,]]>
|
|
<![%standalone-ignore[<xref linkend="upgrading">]]>
|
|
which has instructions about upgrading a
|
|
cluster.
|
|
</para>
|
|
</note>
|
|
|
|
<para>
|
|
To install <productname>PostgreSQL</> enter:
|
|
<screen>
|
|
<userinput>gmake install</userinput>
|
|
</screen>
|
|
This will install files into the directories that were specified
|
|
in <xref linkend="configure">. Make sure that you have appropriate
|
|
permissions to write into that area. Normally you need to do this
|
|
step as root. Alternatively, you can create the target
|
|
directories in advance and arrange for appropriate permissions to
|
|
be granted.
|
|
</para>
|
|
|
|
<para>
|
|
To install the documentation (HTML and man pages), enter:
|
|
<screen>
|
|
<userinput>gmake install-docs</userinput>
|
|
</screen>
|
|
</para>
|
|
|
|
<para>
|
|
If you built the world above, type instead:
|
|
<screen>
|
|
<userinput>gmake install-world</userinput>
|
|
</screen>
|
|
This also installs the documentation.
|
|
</para>
|
|
|
|
<para>
|
|
You can use <literal>gmake install-strip</literal> instead of
|
|
<literal>gmake install</literal> to strip the executable files and
|
|
libraries as they are installed. This will save some space. If
|
|
you built with debugging support, stripping will effectively
|
|
remove the debugging support, so it should only be done if
|
|
debugging is no longer needed. <literal>install-strip</literal>
|
|
tries to do a reasonable job saving space, but it does not have
|
|
perfect knowledge of how to strip every unneeded byte from an
|
|
executable file, so if you want to save all the disk space you
|
|
possibly can, you will have to do manual work.
|
|
</para>
|
|
|
|
<para>
|
|
The standard installation provides all the header files needed for client
|
|
application development as well as for server-side program
|
|
development, such as custom functions or data types written in C.
|
|
(Prior to <productname>PostgreSQL</> 8.0, a separate <literal>gmake
|
|
install-all-headers</> command was needed for the latter, but this
|
|
step has been folded into the standard install.)
|
|
</para>
|
|
|
|
<formalpara>
|
|
<title>Client-only installation:</title>
|
|
<para>
|
|
If you want to install only the client applications and
|
|
interface libraries, then you can use these commands:
|
|
<screen>
|
|
<userinput>gmake -C src/bin install</>
|
|
<userinput>gmake -C src/include install</>
|
|
<userinput>gmake -C src/interfaces install</>
|
|
<userinput>gmake -C doc install</>
|
|
</screen>
|
|
<filename>src/bin</> has a few binaries for server-only use,
|
|
but they are small.
|
|
</para>
|
|
</formalpara>
|
|
</step>
|
|
</procedure>
|
|
|
|
<formalpara>
|
|
<title>Uninstallation:</title>
|
|
<para>
|
|
To undo the installation use the command <command>gmake
|
|
uninstall</>. However, this will not remove any created directories.
|
|
</para>
|
|
</formalpara>
|
|
|
|
<formalpara>
|
|
<title>Cleaning:</title>
|
|
|
|
<para>
|
|
After the installation you can free disk space by removing the built
|
|
files from the source tree with the command <command>gmake
|
|
clean</>. This will preserve the files made by the <command>configure</command>
|
|
program, so that you can rebuild everything with <command>gmake</>
|
|
later on. To reset the source tree to the state in which it was
|
|
distributed, use <command>gmake distclean</>. If you are going to
|
|
build for several platforms within the same source tree you must do
|
|
this and re-configure for each platform. (Alternatively, use
|
|
a separate build tree for each platform, so that the source tree
|
|
remains unmodified.)
|
|
</para>
|
|
</formalpara>
|
|
|
|
<para>
|
|
If you perform a build and then discover that your <command>configure</>
|
|
options were wrong, or if you change anything that <command>configure</>
|
|
investigates (for example, software upgrades), then it's a good
|
|
idea to do <command>gmake distclean</> before reconfiguring and
|
|
rebuilding. Without this, your changes in configuration choices
|
|
might not propagate everywhere they need to.
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1 id="install-post">
|
|
<title>Post-Installation Setup</title>
|
|
|
|
<sect2>
|
|
<title>Shared Libraries</title>
|
|
|
|
<indexterm>
|
|
<primary>shared library</primary>
|
|
</indexterm>
|
|
|
|
<para>
|
|
On some systems with shared libraries
|
|
you need to tell the system how to find the newly installed
|
|
shared libraries. The systems on which this is
|
|
<emphasis>not</emphasis> necessary include
|
|
<systemitem class="osname">FreeBSD</>,
|
|
<systemitem class="osname">HP-UX</>, <systemitem
|
|
class="osname">IRIX</>, <systemitem class="osname">Linux</>,
|
|
<systemitem class="osname">NetBSD</>, <systemitem
|
|
class="osname">OpenBSD</>, <systemitem class="osname">Tru64
|
|
UNIX</> (formerly <systemitem class="osname">Digital UNIX</>), and
|
|
<systemitem class="osname">Solaris</>.
|
|
</para>
|
|
|
|
<para>
|
|
The method to set the shared library search path varies between
|
|
platforms, but the most widely-used method is to set the
|
|
environment variable <envar>LD_LIBRARY_PATH</> like so: In Bourne
|
|
shells (<command>sh</>, <command>ksh</>, <command>bash</>, <command>zsh</>):
|
|
<programlisting>
|
|
LD_LIBRARY_PATH=/usr/local/pgsql/lib
|
|
export LD_LIBRARY_PATH
|
|
</programlisting>
|
|
or in <command>csh</> or <command>tcsh</>:
|
|
<programlisting>
|
|
setenv LD_LIBRARY_PATH /usr/local/pgsql/lib
|
|
</programlisting>
|
|
Replace <literal>/usr/local/pgsql/lib</> with whatever you set
|
|
<option><literal>--libdir</></> to in <xref linkend="configure">.
|
|
You should put these commands into a shell start-up file such as
|
|
<filename>/etc/profile</> or <filename>~/.bash_profile</>. Some
|
|
good information about the caveats associated with this method can
|
|
be found at <ulink
|
|
url="http://xahlee.org/UnixResource_dir/_/ldpath.html"></ulink>.
|
|
</para>
|
|
|
|
<para>
|
|
On some systems it might be preferable to set the environment
|
|
variable <envar>LD_RUN_PATH</envar> <emphasis>before</emphasis>
|
|
building.
|
|
</para>
|
|
|
|
<para>
|
|
On <systemitem class="osname">Cygwin</systemitem>, put the library
|
|
directory in the <envar>PATH</envar> or move the
|
|
<filename>.dll</filename> files into the <filename>bin</filename>
|
|
directory.
|
|
</para>
|
|
|
|
<para>
|
|
If in doubt, refer to the manual pages of your system (perhaps
|
|
<command>ld.so</command> or <command>rld</command>). If you later
|
|
get a message like:
|
|
<screen>
|
|
psql: error in loading shared libraries
|
|
libpq.so.2.1: cannot open shared object file: No such file or directory
|
|
</screen>
|
|
then this step was necessary. Simply take care of it then.
|
|
</para>
|
|
|
|
<para>
|
|
<indexterm>
|
|
<primary>ldconfig</primary>
|
|
</indexterm>
|
|
If you are on <systemitem class="osname">Linux</> and you have root
|
|
access, you can run:
|
|
<programlisting>
|
|
/sbin/ldconfig /usr/local/pgsql/lib
|
|
</programlisting>
|
|
(or equivalent directory) after installation to enable the
|
|
run-time linker to find the shared libraries faster. Refer to the
|
|
manual page of <command>ldconfig</> for more information. On
|
|
<systemitem class="osname">FreeBSD</>, <systemitem
|
|
class="osname">NetBSD</>, and <systemitem
|
|
class="osname">OpenBSD</> the command is:
|
|
<programlisting>
|
|
/sbin/ldconfig -m /usr/local/pgsql/lib
|
|
</programlisting>
|
|
instead. Other systems are not known to have an equivalent
|
|
command.
|
|
</para>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Environment Variables</title>
|
|
|
|
<indexterm>
|
|
<primary><envar>PATH</envar></primary>
|
|
</indexterm>
|
|
|
|
<para>
|
|
If you installed into <filename>/usr/local/pgsql</> or some other
|
|
location that is not searched for programs by default, you should
|
|
add <filename>/usr/local/pgsql/bin</> (or whatever you set
|
|
<option><literal>--bindir</></> to in <xref linkend="configure">)
|
|
into your <envar>PATH</>. Strictly speaking, this is not
|
|
necessary, but it will make the use of <productname>PostgreSQL</>
|
|
much more convenient.
|
|
</para>
|
|
|
|
<para>
|
|
To do this, add the following to your shell start-up file, such as
|
|
<filename>~/.bash_profile</> (or <filename>/etc/profile</>, if you
|
|
want it to affect all users):
|
|
<programlisting>
|
|
PATH=/usr/local/pgsql/bin:$PATH
|
|
export PATH
|
|
</programlisting>
|
|
If you are using <command>csh</> or <command>tcsh</>, then use this command:
|
|
<programlisting>
|
|
set path = ( /usr/local/pgsql/bin $path )
|
|
</programlisting>
|
|
</para>
|
|
|
|
<para>
|
|
<indexterm>
|
|
<primary><envar>MANPATH</envar></primary>
|
|
</indexterm>
|
|
To enable your system to find the <application>man</>
|
|
documentation, you need to add lines like the following to a
|
|
shell start-up file unless you installed into a location that is
|
|
searched by default:
|
|
<programlisting>
|
|
MANPATH=/usr/local/pgsql/man:$MANPATH
|
|
export MANPATH
|
|
</programlisting>
|
|
</para>
|
|
|
|
<para>
|
|
The environment variables <envar>PGHOST</> and <envar>PGPORT</>
|
|
specify to client applications the host and port of the database
|
|
server, overriding the compiled-in defaults. If you are going to
|
|
run client applications remotely then it is convenient if every
|
|
user that plans to use the database sets <envar>PGHOST</>. This
|
|
is not required, however; the settings can be communicated via command
|
|
line options to most client programs.
|
|
</para>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
|
|
<![%standalone-include;[
|
|
<sect1 id="install-getting-started">
|
|
<title>Getting Started</title>
|
|
|
|
<para>
|
|
The following is a quick summary of how to get <productname>PostgreSQL</> up and
|
|
running once installed. The main documentation contains more information.
|
|
</para>
|
|
|
|
<procedure>
|
|
<step>
|
|
<para>
|
|
Create a user account for the <productname>PostgreSQL</>
|
|
server. This is the user the server will run as. For production
|
|
use you should create a separate, unprivileged account
|
|
(<quote>postgres</> is commonly used). If you do not have root
|
|
access or just want to play around, your own user account is
|
|
enough, but running the server as root is a security risk and
|
|
will not work.
|
|
<screen>
|
|
<userinput>adduser postgres</>
|
|
</screen>
|
|
</para>
|
|
</step>
|
|
|
|
<step>
|
|
<para>
|
|
Create a database installation with the <command>initdb</>
|
|
command. To run <command>initdb</> you must be logged in to your
|
|
<productname>PostgreSQL</> server account. It will not work as
|
|
root.
|
|
<screen>
|
|
root# <userinput>mkdir /usr/local/pgsql/data</>
|
|
root# <userinput>chown postgres /usr/local/pgsql/data</>
|
|
root# <userinput>su - postgres</>
|
|
postgres$ <userinput>/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data</>
|
|
</screen>
|
|
</para>
|
|
|
|
<para>
|
|
The <option>-D</> option specifies the location where the data
|
|
will be stored. You can use any path you want, it does not have
|
|
to be under the installation directory. Just make sure that the
|
|
server account can write to the directory (or create it, if it
|
|
doesn't already exist) before starting <command>initdb</>, as
|
|
illustrated here.
|
|
</para>
|
|
</step>
|
|
|
|
<step>
|
|
<para>
|
|
At this point, if you did not use the <command>initdb</> <literal>-A</>
|
|
option, you might want to modify <filename>pg_hba.conf</> to control
|
|
local access to the server before you start it. The default is to
|
|
trust all local users.
|
|
</para>
|
|
</step>
|
|
|
|
<step>
|
|
<para>
|
|
The previous <command>initdb</> step should have told you how to
|
|
start up the database server. Do so now. The command should look
|
|
something like:
|
|
<programlisting>
|
|
/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
|
|
</programlisting>
|
|
This will start the server in the foreground. To put the server
|
|
in the background use something like:
|
|
<programlisting>
|
|
nohup /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data \
|
|
</dev/null >>server.log 2>&1 </dev/null &
|
|
</programlisting>
|
|
</para>
|
|
|
|
<para>
|
|
To stop a server running in the background you can type:
|
|
<programlisting>
|
|
kill `cat /usr/local/pgsql/data/postmaster.pid`
|
|
</programlisting>
|
|
</para>
|
|
</step>
|
|
|
|
<step>
|
|
<para>
|
|
Create a database:
|
|
<screen>
|
|
<userinput>createdb testdb</>
|
|
</screen>
|
|
Then enter:
|
|
<screen>
|
|
<userinput>psql testdb</>
|
|
</screen>
|
|
to connect to that database. At the prompt you can enter SQL
|
|
commands and start experimenting.
|
|
</para>
|
|
</step>
|
|
</procedure>
|
|
</sect1>
|
|
|
|
<sect1 id="install-whatnow">
|
|
<title>What Now?</title>
|
|
|
|
<para>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
The <productname>PostgreSQL</> distribution contains a
|
|
comprehensive documentation set, which you should read sometime.
|
|
After installation, the documentation can be accessed by
|
|
pointing your browser to
|
|
<filename>/usr/local/pgsql/doc/html/index.html</>, unless you
|
|
changed the installation directories.
|
|
</para>
|
|
|
|
<para>
|
|
The first few chapters of the main documentation are the Tutorial,
|
|
which should be your first reading if you are completely new to
|
|
<acronym>SQL</> databases. If you are familiar with database
|
|
concepts then you want to proceed with part on server
|
|
administration, which contains information about how to set up
|
|
the database server, database users, and authentication.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
Usually, you will want to modify your computer so that it will
|
|
automatically start the database server whenever it boots. Some
|
|
suggestions for this are in the documentation.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
Run the regression tests against the installed server (using
|
|
<command>gmake installcheck</command>). If you didn't run the
|
|
tests before installation, you should definitely do it now. This
|
|
is also explained in the documentation.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
By default, <productname>PostgreSQL</> is configured to run on
|
|
minimal hardware. This allows it to start up with almost any
|
|
hardware configuration. The default configuration is, however,
|
|
not designed for optimum performance. To achieve optimum
|
|
performance, several server parameters must be adjusted, the two
|
|
most common being <varname>shared_buffers</varname> and
|
|
<varname>work_mem</varname>.
|
|
Other parameters mentioned in the documentation also affect
|
|
performance.
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</sect1>
|
|
]]>
|
|
|
|
|
|
<sect1 id="supported-platforms">
|
|
<title>Supported Platforms</title>
|
|
|
|
<para>
|
|
A platform (that is, a CPU architecture and operating system combination)
|
|
is considered supported by the <productname>PostgreSQL</> development
|
|
community if the code contains provisions to work on that platform and
|
|
it has recently been verified to build and pass its regression tests
|
|
on that platform. Currently, most testing of platform compatibility
|
|
is done automatically by test machines in the
|
|
<ulink url="http://buildfarm.postgresql.org/">PostgreSQL Build Farm</ulink>.
|
|
If you are interested in using <productname>PostgreSQL</> on a platform
|
|
that is not represented in the build farm, but on which the code works
|
|
or can be made to work, you are strongly encouraged to set up a build
|
|
farm member machine so that continued compatibility can be assured.
|
|
</para>
|
|
|
|
<para>
|
|
In general, <productname>PostgreSQL</> can be expected to work on
|
|
these CPU architectures: x86, x86_64, IA64, PowerPC,
|
|
PowerPC 64, S/390, S/390x, Sparc, Sparc 64, Alpha, ARM, MIPS, MIPSEL, M68K,
|
|
and PA-RISC. Code support exists for M32R, NS32K, and VAX, but these
|
|
architectures are not known to have been tested recently. It is often
|
|
possible to build on an unsupported CPU type by configuring with
|
|
<option>--disable-spinlocks</option>, but performance will be poor.
|
|
</para>
|
|
|
|
<para>
|
|
<productname>PostgreSQL</> can be expected to work on these operating
|
|
systems: Linux (all recent distributions), Windows (Win2000 SP4 and later),
|
|
FreeBSD, OpenBSD, NetBSD, Mac OS X, AIX, HP/UX, IRIX, Solaris, Tru64 Unix,
|
|
and UnixWare. Other Unix-like systems may also work but are not currently
|
|
being tested. In most cases, all CPU architectures supported by
|
|
a given operating system will work. Look in
|
|
the <xref linkend="installation-platform-notes"> below to see if
|
|
there is information
|
|
specific to your operating system, particularly if using an older system.
|
|
</para>
|
|
|
|
<para>
|
|
If you have installation problems on a platform that is known
|
|
to be supported according to recent build farm results, please report
|
|
it to <email>pgsql-bugs@postgresql.org</email>. If you are interested
|
|
in porting <productname>PostgreSQL</> to a new platform,
|
|
<email>pgsql-hackers@postgresql.org</email> is the appropriate place
|
|
to discuss that.
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1 id="installation-platform-notes">
|
|
<title>Platform-specific Notes</title>
|
|
|
|
<para>
|
|
This section documents additional platform-specific issues
|
|
regarding the installation and setup of PostgreSQL. Be sure to
|
|
read the installation instructions, and in
|
|
particular <xref linkend="install-requirements"> as well. Also,
|
|
check <![%standalone-include[the
|
|
file <filename>src/test/regress/README</> and the documentation]]>
|
|
<![%standalone-ignore[<xref linkend="regress">]]> regarding the
|
|
interpretation of regression test results.
|
|
</para>
|
|
|
|
<para>
|
|
Platforms that are not covered here have no known platform-specific
|
|
installation issues.
|
|
</para>
|
|
|
|
<sect2 id="installation-notes-aix">
|
|
<title>AIX</title>
|
|
|
|
<indexterm zone="installation-notes-aix">
|
|
<primary>AIX</primary>
|
|
<secondary>installation on</secondary>
|
|
</indexterm>
|
|
|
|
<para>
|
|
PostgreSQL works on AIX, but getting it installed properly can be
|
|
challenging. AIX versions from 4.3.3 to 6.1 are considered supported.
|
|
You can use GCC or the native IBM compiler <command>xlc</command>. In
|
|
general, using recent versions of AIX and PostgreSQL helps. Check
|
|
the build farm for up to date information about which versions of
|
|
AIX are known to work.
|
|
</para>
|
|
|
|
<para>
|
|
The minimum recommended fix levels for supported AIX versions are:
|
|
</para>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term>AIX 4.3.3</term>
|
|
<listitem><para>Maintenance Level 11 + post ML11 bundle</para></listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term>AIX 5.1</term>
|
|
<listitem><para>Maintenance Level 9 + post ML9 bundle</para></listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term>AIX 5.2</term>
|
|
<listitem><para>Technology Level 10 Service Pack 3</para></listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term>AIX 5.3</term>
|
|
<listitem><para>Technology Level 7</para></listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term>AIX 6.1</term>
|
|
<listitem><para>Base Level</para></listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
|
|
<para>
|
|
To check your current fix level, use
|
|
<command>oslevel -r</command> in AIX 4.3.3 to AIX 5.2 ML 7, or
|
|
<command>oslevel -s</command> in later versions.
|
|
</para>
|
|
|
|
<para>
|
|
Use the following <command>configure</command> flags in addition
|
|
to your own if you have installed Readline or libz in
|
|
<literal>/usr/local</>:
|
|
<literal>--with-includes=/usr/local/include
|
|
--with-libraries=/usr/local/lib</literal>.
|
|
</para>
|
|
|
|
<sect3>
|
|
<title>GCC Issues</title>
|
|
|
|
<para>
|
|
On AIX 5.3, there have been some problems getting PostgreSQL to
|
|
compile and run using GCC.
|
|
</para>
|
|
|
|
<para>
|
|
You will want to use a version of GCC subsequent to 3.3.2,
|
|
particularly if you use a prepackaged version. We had good
|
|
success with 4.0.1. Problems with earlier versions seem to have
|
|
more to do with the way IBM packaged GCC than with actual issues
|
|
with GCC, so that if you compile GCC yourself, you might well
|
|
have success with an earlier version of GCC.
|
|
</para>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>Unix-Domain Sockets Broken</title>
|
|
|
|
<para>
|
|
AIX 5.3 has a problem
|
|
where <structname>sockaddr_storage</structname> is not defined to
|
|
be large enough. In version 5.3, IBM increased the size of
|
|
<structname>sockaddr_un</structname>, the address structure for
|
|
Unix-domain sockets, but did not correspondingly increase the
|
|
size of <structname>sockaddr_storage</structname>. The result of
|
|
this is that attempts to use Unix-domain sockets with PostgreSQL
|
|
lead to libpq overflowing the data structure. TCP/IP connections
|
|
work OK, but not Unix-domain sockets, which prevents the
|
|
regression tests from working.
|
|
</para>
|
|
|
|
<para>
|
|
The problem was reported to IBM, and is recorded as bug report
|
|
PMR29657. If you upgrade to maintenance level 5300-03 or later,
|
|
that will include this fix. A quick workaround
|
|
is to alter <symbol>_SS_MAXSIZE</symbol> to 1025 in
|
|
<filename>/usr/include/sys/socket.h</filename>. In either case,
|
|
recompile PostgreSQL once you have the corrected header file.
|
|
</para>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>Internet Address Issues</title>
|
|
|
|
<para>
|
|
PostgreSQL relies on the system's <function>getaddrinfo</> function
|
|
to parse IP addresses in <varname>listen_addresses</>,
|
|
<filename>pg_hba.conf</>, etc. Older versions of AIX have assorted
|
|
bugs in this function. If you have problems related to these settings,
|
|
updating to the appropriate AIX fix level shown above
|
|
should take care of it.
|
|
</para>
|
|
|
|
<!-- http://archives.postgresql.org/message-id/6064jt6cfm.fsf_-_@dba2.int.libertyrms.com -->
|
|
|
|
<para>
|
|
One user reports:
|
|
</para>
|
|
|
|
<para>
|
|
When implementing PostgreSQL version 8.1 on AIX 5.3, we
|
|
periodically ran into problems where the statistics collector
|
|
would <quote>mysteriously</quote> not come up successfully. This
|
|
appears to be the result of unexpected behavior in the IPv6
|
|
implementation. It looks like PostgreSQL and IPv6 do not play
|
|
very well together on AIX 5.3.
|
|
</para>
|
|
|
|
<para>
|
|
Any of the following actions <quote>fix</quote> the problem.
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
Delete the IPv6 address for localhost:
|
|
<screen>
|
|
(as root)
|
|
# ifconfig lo0 inet6 ::1/0 delete
|
|
</screen>
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
Remove IPv6 from net services. The
|
|
file <filename>/etc/netsvc.conf</filename> on AIX is roughly
|
|
equivalent to <filename>/etc/nsswitch.conf</filename> on
|
|
Solaris/Linux. The default, on AIX, is thus:
|
|
<programlisting>
|
|
hosts=local,bind
|
|
</programlisting>
|
|
Replace this with:
|
|
<programlisting>
|
|
hosts=local4,bind4
|
|
</programlisting>
|
|
to deactivate searching for IPv6 addresses.
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
|
|
<warning>
|
|
<para>
|
|
This is really a workaround for problems relating
|
|
to immaturity of IPv6 support, which improved visibly during the
|
|
course of AIX 5.3 releases. It has worked with AIX version 5.3,
|
|
but does not represent an elegant solution to the problem. It has
|
|
been reported that this workaround is not only unnecessary, but
|
|
causes problems on AIX 6.1, where IPv6 support has become more mature.
|
|
</para>
|
|
</warning>
|
|
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>Memory Management</title>
|
|
<!-- http://archives.postgresql.org/message-id/603bgqmpl9.fsf@dba2.int.libertyrms.com -->
|
|
|
|
<para>
|
|
AIX can be somewhat peculiar with regards to the way it does
|
|
memory management. You can have a server with many multiples of
|
|
gigabytes of RAM free, but still get out of memory or address
|
|
space errors when running applications. One example
|
|
is <command>createlang</command> failing with unusual errors.
|
|
For example, running as the owner of the PostgreSQL installation:
|
|
<screen>
|
|
-bash-3.00$ createlang plperl template1
|
|
createlang: language installation failed: ERROR: could not load library "/opt/dbs/pgsql748/lib/plperl.so": A memory address is not in the address space for the process.
|
|
</screen>
|
|
Running as a non-owner in the group possessing the PostgreSQL
|
|
installation:
|
|
<screen>
|
|
-bash-3.00$ createlang plperl template1
|
|
createlang: language installation failed: ERROR: could not load library "/opt/dbs/pgsql748/lib/plperl.so": Bad address
|
|
</screen>
|
|
Another example is out of memory errors in the PostgreSQL server
|
|
logs, with every memory allocation near or greater than 256 MB
|
|
failing.
|
|
</para>
|
|
|
|
<para>
|
|
The overall cause of all these problems is the default bittedness
|
|
and memory model used by the server process. By default, all
|
|
binaries built on AIX are 32-bit. This does not depend upon
|
|
hardware type or kernel in use. These 32-bit processes are
|
|
limited to 4 GB of memory laid out in 256 MB segments using one
|
|
of a few models. The default allows for less than 256 MB in the
|
|
heap as it shares a single segment with the stack.
|
|
</para>
|
|
|
|
<para>
|
|
In the case of the <command>createlang</command> example, above,
|
|
check your umask and the permissions of the binaries in your
|
|
PostgreSQL installation. The binaries involved in that example
|
|
were 32-bit and installed as mode 750 instead of 755. Due to the
|
|
permissions being set in this fashion, only the owner or a member
|
|
of the possessing group can load the library. Since it isn't
|
|
world-readable, the loader places the object into the process'
|
|
heap instead of the shared library segments where it would
|
|
otherwise be placed.
|
|
</para>
|
|
|
|
<para>
|
|
The <quote>ideal</quote> solution for this is to use a 64-bit
|
|
build of PostgreSQL, but that is not always practical, because
|
|
systems with 32-bit processors can build, but not run, 64-bit
|
|
binaries.
|
|
</para>
|
|
|
|
<para>
|
|
If a 32-bit binary is desired, set <symbol>LDR_CNTRL</symbol> to
|
|
<literal>MAXDATA=0x<replaceable>n</replaceable>0000000</literal>,
|
|
where 1 <= n <= 8, before starting the PostgreSQL server,
|
|
and try different values and <filename>postgresql.conf</filename>
|
|
settings to find a configuration that works satisfactorily. This
|
|
use of <symbol>LDR_CNTRL</symbol> tells AIX that you want the
|
|
server to have <symbol>MAXDATA</symbol> bytes set aside for the
|
|
heap, allocated in 256 MB segments. When you find a workable
|
|
configuration,
|
|
<command>ldedit</command> can be used to modify the binaries so
|
|
that they default to using the desired heap size. PostgreSQL can
|
|
also be rebuilt, passing <literal>configure
|
|
LDFLAGS="-Wl,-bmaxdata:0x<replaceable>n</replaceable>0000000"</literal>
|
|
to achieve the same effect.
|
|
</para>
|
|
|
|
<para>
|
|
For a 64-bit build, set <envar>OBJECT_MODE</envar> to 64 and
|
|
pass <literal>CC="gcc -maix64"</literal>
|
|
and <literal>LDFLAGS="-Wl,-bbigtoc"</literal>
|
|
to <command>configure</command>. (Options for
|
|
<command>xlc</command> might differ.) If you omit the export of
|
|
<envar>OBJECT_MODE</envar>, your build may fail with linker errors. When
|
|
<envar>OBJECT_MODE</envar> is set, it tells AIX's build utilities
|
|
such as <command>ar</>, <command>as</>, and <command>ld</> what
|
|
type of objects to default to handling.
|
|
</para>
|
|
|
|
<para>
|
|
By default, overcommit of paging space can happen. While we have
|
|
not seen this occur, AIX will kill processes when it runs out of
|
|
memory and the overcommit is accessed. The closest to this that
|
|
we have seen is fork failing because the system decided that
|
|
there was not enough memory for another process. Like many other
|
|
parts of AIX, the paging space allocation method and
|
|
out-of-memory kill is configurable on a system- or process-wide
|
|
basis if this becomes a problem.
|
|
</para>
|
|
|
|
<bibliography>
|
|
<title>References and Resources</title>
|
|
|
|
<biblioentry>
|
|
<biblioset relation="article">
|
|
<title><ulink url="http://publib.boulder.ibm.com/infocenter/pseries/topic/com.ibm.aix.doc/aixprggd/genprogc/lrg_prg_support.htm">Large Program Support</ulink></title>
|
|
</biblioset>
|
|
<biblioset relation="book">
|
|
<title>AIX Documentation: General Programming Concepts: Writing and Debugging Programs</title>
|
|
</biblioset>
|
|
</biblioentry>
|
|
|
|
<biblioentry>
|
|
<biblioset relation="article">
|
|
<title><ulink url="http://publib.boulder.ibm.com/infocenter/pseries/topic/com.ibm.aix.doc/aixprggd/genprogc/address_space.htm">Program Address Space Overview</ulink></title>
|
|
</biblioset>
|
|
<biblioset relation="book">
|
|
<title>AIX Documentation: General Programming Concepts: Writing and Debugging Programs</title>
|
|
</biblioset>
|
|
</biblioentry>
|
|
|
|
<biblioentry>
|
|
<biblioset relation="article">
|
|
<title><ulink url="http://publib.boulder.ibm.com/infocenter/pseries/v5r3/topic/com.ibm.aix.doc/aixbman/prftungd/resmgmt2.htm">Performance Overview of the Virtual Memory Manager (VMM)</ulink></title>
|
|
</biblioset>
|
|
<biblioset relation="book">
|
|
<title>AIX Documentation: Performance Management Guide</title>
|
|
</biblioset>
|
|
</biblioentry>
|
|
|
|
<biblioentry>
|
|
<biblioset relation="article">
|
|
<title><ulink url="http://publib.boulder.ibm.com/infocenter/pseries/v5r3/topic/com.ibm.aix.doc/aixbman/prftungd/memperf7.htm">Page Space Allocation</ulink></title>
|
|
</biblioset>
|
|
<biblioset relation="book">
|
|
<title>AIX Documentation: Performance Management Guide</title>
|
|
</biblioset>
|
|
</biblioentry>
|
|
|
|
<biblioentry>
|
|
<biblioset relation="article">
|
|
<title><ulink url="http://publib.boulder.ibm.com/infocenter/pseries/v5r3/topic/com.ibm.aix.doc/aixbman/prftungd/memperf6.htm">Paging-space thresholds tuning</ulink></title>
|
|
</biblioset>
|
|
<biblioset relation="book">
|
|
<title>AIX Documentation: Performance Management Guide</title>
|
|
</biblioset>
|
|
</biblioentry>
|
|
|
|
<biblioentry>
|
|
<title><ulink url="http://www.redbooks.ibm.com/abstracts/sg245674.html?Open">Developing and Porting C and C++ Applications on AIX</ulink></title>
|
|
<publisher>
|
|
<publishername>IBM Redbook</publishername>
|
|
</publisher>
|
|
</biblioentry>
|
|
</bibliography>
|
|
</sect3>
|
|
</sect2>
|
|
|
|
<sect2 id="installation-notes-cygwin">
|
|
<title>Cygwin</title>
|
|
|
|
<indexterm zone="installation-notes-cygwin">
|
|
<primary>Cygwin</primary>
|
|
<secondary>installation on</secondary>
|
|
</indexterm>
|
|
|
|
<para>
|
|
PostgreSQL can be built using Cygwin, a Linux-like environment for
|
|
Windows, but that method is inferior to the native Windows build
|
|
<![%standalone-ignore[(see <xref linkend="install-windows">)]]> and
|
|
running a server under Cygwin is no longer recommended.
|
|
</para>
|
|
|
|
<para>
|
|
When building from source, proceed according to the normal
|
|
installation procedure (i.e., <literal>./configure;
|
|
make</literal>; etc.), noting the following-Cygwin specific
|
|
differences:
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
Set your path to use the Cygwin bin directory before the
|
|
Windows utilities. This will help prevent problems with
|
|
compilation.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
The GNU make command is called <command>make</command>, not <command>gmake</command>.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
The <command>adduser</command> command is not supported; use
|
|
the appropriate user management application on Windows NT,
|
|
2000, or XP. Otherwise, skip this step.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
The <command>su</command> command is not supported; use ssh to
|
|
simulate su on Windows NT, 2000, or XP. Otherwise, skip this
|
|
step.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
OpenSSL is not supported.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
Start <command>cygserver</command> for shared memory support.
|
|
To do this, enter the command <literal>/usr/sbin/cygserver
|
|
&</literal>. This program needs to be running anytime you
|
|
start the PostgreSQL server or initialize a database cluster
|
|
(<command>initdb</command>). The
|
|
default <command>cygserver</command> configuration may need to
|
|
be changed (e.g., increase <symbol>SEMMNS</symbol>) to prevent
|
|
PostgreSQL from failing due to a lack of system resources.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
Building might fail on some systems where a locale other than
|
|
C is in use. To fix this, set the locale to C by doing
|
|
<command>export LANG=C.utf8</command> before building, and then
|
|
setting it back to the previous setting, after you have installed
|
|
PostgreSQL.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
The parallel regression tests (<literal>make check</literal>)
|
|
can generate spurious regression test failures due to
|
|
overflowing the <function>listen()</function> backlog queue
|
|
which causes connection refused errors or hangs. You can limit
|
|
the number of connections using the make
|
|
variable <varname>MAX_CONNECTIONS</varname> thus:
|
|
<programlisting>
|
|
make MAX_CONNECTIONS=5 check
|
|
</programlisting>
|
|
(On some systems you can have up to about 10 simultaneous
|
|
connections).
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
|
|
<para>
|
|
It is possible to install <command>cygserver</command> and the
|
|
PostgreSQL server as Windows NT services. For information on how
|
|
to do this, please refer to the <filename>README</filename>
|
|
document included with the PostgreSQL binary package on Cygwin.
|
|
It is installed in the
|
|
directory <filename>/usr/share/doc/Cygwin</filename>.
|
|
</para>
|
|
</sect2>
|
|
|
|
<sect2 id="installation-notes-hpux">
|
|
<title>HP-UX</title>
|
|
|
|
<indexterm zone="installation-notes-hpux">
|
|
<primary>HP-UX</primary>
|
|
<secondary>installation on</secondary>
|
|
</indexterm>
|
|
|
|
<para>
|
|
PostgreSQL 7.3+ should work on Series 700/800 PA-RISC machines
|
|
running HP-UX 10.X or 11.X, given appropriate system patch levels
|
|
and build tools. At least one developer routinely tests on HP-UX
|
|
10.20, and we have reports of successful installations on HP-UX
|
|
11.00 and 11.11.
|
|
</para>
|
|
|
|
<para>
|
|
Aside from the PostgreSQL source distribution, you will need GNU
|
|
make (HP's make will not do), and either GCC or HP's full ANSI C
|
|
compiler. If you intend to build from Git sources rather than a
|
|
distribution tarball, you will also need Flex (GNU lex) and Bison
|
|
(GNU yacc). We also recommend making sure you are fairly
|
|
up-to-date on HP patches. At a minimum, if you are building 64
|
|
bit binaries on HP-UX 11.11 you may need PHSS_30966 (11.11) or a
|
|
successor patch otherwise <command>initdb</command> may hang:
|
|
<literallayout>
|
|
PHSS_30966 s700_800 ld(1) and linker tools cumulative patch
|
|
</literallayout>
|
|
|
|
On general principles you should be current on libc and ld/dld
|
|
patches, as well as compiler patches if you are using HP's C
|
|
compiler. See HP's support sites such
|
|
as <ulink url="http://itrc.hp.com"></ulink> and
|
|
<ulink url="ftp://us-ffs.external.hp.com/"></ulink> for free
|
|
copies of their latest patches.
|
|
</para>
|
|
|
|
<para>
|
|
If you are building on a PA-RISC 2.0 machine and want to have
|
|
64-bit binaries using GCC, you must use GCC 64-bit version. GCC
|
|
binaries for HP-UX PA-RISC and Itanium are available from
|
|
<ulink url="http://www.hp.com/go/gcc"></ulink>. Don't forget to
|
|
get and install binutils at the same time.
|
|
</para>
|
|
|
|
<para>
|
|
If you are building on a PA-RISC 2.0 machine and want the compiled
|
|
binaries to run on PA-RISC 1.1 machines you will need to specify
|
|
<option>+DAportable</option> in <envar>CFLAGS</envar>.
|
|
</para>
|
|
|
|
<para>
|
|
If you are building on a HP-UX Itanium machine, you will need the
|
|
latest HP ANSI C compiler with its dependent patch or successor
|
|
patches:
|
|
<literallayout>
|
|
PHSS_30848 s700_800 HP C Compiler (A.05.57)
|
|
PHSS_30849 s700_800 u2comp/be/plugin library Patch
|
|
</literallayout>
|
|
</para>
|
|
|
|
<para>
|
|
If you have both HP's C compiler and GCC's, then you might want to
|
|
explicitly select the compiler to use when you
|
|
run <command>configure</command>:
|
|
<programlisting>
|
|
./configure CC=cc
|
|
</programlisting>
|
|
for HP's C compiler, or
|
|
<programlisting>
|
|
./configure CC=gcc
|
|
</programlisting>
|
|
for GCC. If you omit this setting, then configure will
|
|
pick <command>gcc</command> if it has a choice.
|
|
</para>
|
|
|
|
<para>
|
|
The default install target location
|
|
is <filename>/usr/local/pgsql</filename>, which you might want to
|
|
change to something under <filename>/opt</filename>. If so, use
|
|
the
|
|
<option>--prefix</option> switch to <command>configure</command>.
|
|
</para>
|
|
|
|
<para>
|
|
In the regression tests, there might be some low-order-digit
|
|
differences in the geometry tests, which vary depending on which
|
|
compiler and math library versions you use. Any other error is
|
|
cause for suspicion.
|
|
</para>
|
|
</sect2>
|
|
|
|
<sect2 id="installation-notes-irix">
|
|
<title>IRIX</title>
|
|
|
|
<indexterm zone="installation-notes-irix">
|
|
<primary>IRIX</primary>
|
|
<secondary>installation on</secondary>
|
|
</indexterm>
|
|
|
|
<para>
|
|
PostgreSQL has been reported to run successfully on MIPS r8000,
|
|
r10000 (both ip25 and ip27) and r12000(ip35) processors, running
|
|
IRIX 6.5.5m, 6.5.12, 6.5.13, and 6.5.26 with MIPSPro compilers
|
|
version 7.30, 7.3.1.2m, 7.3, and 7.4.4m.
|
|
</para>
|
|
|
|
<para>
|
|
You will need the MIPSPro full ANSI C compiler. There are
|
|
problems trying to build with GCC. It is a known GCC bug (not
|
|
fixed as of version 3.0) related to using functions that return
|
|
certain kinds of structures. This bug affects functions like
|
|
<function>inet_ntoa</>, <function>inet_lnaof</>, <function>inet_netof</>, <function>inet_makeaddr</>,
|
|
and <function>semctl</>. It is supposed to be fixed by forcing
|
|
code to link those functions with libgcc, but this has not been
|
|
tested yet.
|
|
</para>
|
|
|
|
<para>
|
|
It is known that version 7.4.1m of the MIPSPro compiler generates
|
|
incorrect code. The symptom is <quote>invalid primary checkpoint
|
|
record</quote> when trying to start the database.) Version 7.4.4m
|
|
is OK; the status of intermediate versions is uncertain.
|
|
</para>
|
|
|
|
<para>
|
|
There may be a compilation problem like the following:
|
|
<screen>
|
|
cc-1020 cc: ERROR File = pqcomm.c, Line = 427
|
|
The identifier "TCP_NODELAY" is undefined.
|
|
|
|
if (setsockopt(port->sock, IPPROTO_TCP, TCP_NODELAY,
|
|
</screen>
|
|
Some versions include TCP definitions
|
|
in <filename>sys/xti.h</filename>, so it is necessary to
|
|
add <literal>#include <sys/xti.h></literal>
|
|
in <filename>src/backend/libpq/pqcomm.c</> and in
|
|
<filename>src/interfaces/libpq/fe-connect.c</>. If you encounter
|
|
this, please let us know so we can develop a proper fix.
|
|
</para>
|
|
|
|
<para>
|
|
In the regression tests, there might be some low-order-digit
|
|
differences in the geometry tests, depending on which FPU are you
|
|
using. Any other error is cause for suspicion.
|
|
</para>
|
|
</sect2>
|
|
|
|
<sect2 id="installation-notes-mingw">
|
|
<title>MinGW/Native Windows</title>
|
|
|
|
<indexterm zone="installation-notes-mingw">
|
|
<primary>MinGW</primary>
|
|
<secondary>installation on</secondary>
|
|
</indexterm>
|
|
|
|
<para>
|
|
PostgreSQL for Windows can be built using MinGW, a Unix-like build
|
|
environment for Microsoft operating systems, or using
|
|
Microsoft's <productname>Visual C++</productname> compiler suite.
|
|
The MinGW build variant uses the normal build system described in
|
|
this chapter; the Visual C++ build works completely differently
|
|
and is described in <![%standalone-include[the
|
|
documentation]]><![%standalone-ignore[<xref linkend="install-windows">]]>.
|
|
It is a fully native build and uses no additional software like
|
|
MinGW. A ready-made installer is available on the main
|
|
PostgreSQL web site.
|
|
</para>
|
|
|
|
<para>
|
|
The native Windows port requires a 32 or 64-bit version of Windows
|
|
2000 or later. Earlier operating systems do
|
|
not have sufficient infrastructure (but Cygwin may be used on
|
|
those). MinGW, the Unix-like build tools, and MSYS, a collection
|
|
of Unix tools required to run shell scripts
|
|
like <command>configure</command>, can be downloaded
|
|
from <ulink url="http://www.mingw.org/"></ulink>. Neither is
|
|
required to run the resulting binaries; they are needed only for
|
|
creating the binaries.
|
|
</para>
|
|
|
|
<para>
|
|
To build 64 bit binaries using MinGW, install the 64 bit tool set
|
|
from <ulink url="http://mingw-w64.sourceforge.net/"></ulink>, put its bin
|
|
directory in the <envar>PATH</envar>, and run
|
|
<command>configure</command> with the
|
|
<command>--host=x86_64-w64-mingw32</command> option.
|
|
</para>
|
|
|
|
<para>
|
|
After you have everything installed, it is suggested that you
|
|
run <application>psql</application>
|
|
under <command>CMD.EXE</command>, as the MSYS console has
|
|
buffering issues.
|
|
</para>
|
|
|
|
<sect3 id="windows-crash-dumps">
|
|
<title>Collecting Crash Dumps on Windows</title>
|
|
|
|
<para>
|
|
If PostgreSQL on Windows crashes, it has the ability to generate
|
|
<productname>minidumps</> that can be used to track down the cause
|
|
for the crash, similar to core dumps on Unix. These dumps can be
|
|
read using the <productname>Windows Debugger Tools</> or using
|
|
<productname>Visual Studio</>. To enable the generation of dumps
|
|
on Windows, create a subdirectory named <filename>crashdumps</filename>
|
|
inside the cluster data directory. The dumps will then be written
|
|
into this directory with a unique name based on the identifier of
|
|
the crashing process and the current time of the crash.
|
|
</para>
|
|
</sect3>
|
|
</sect2>
|
|
|
|
<sect2 id="installation-notes-sco">
|
|
<title>SCO OpenServer and SCO UnixWare</title>
|
|
|
|
<indexterm zone="installation-notes-sco">
|
|
<primary>SCO</primary>
|
|
<secondary>installation on</secondary>
|
|
</indexterm>
|
|
|
|
<indexterm zone="installation-notes-sco">
|
|
<primary>UnixWare</primary>
|
|
<secondary>installation on</secondary>
|
|
</indexterm>
|
|
|
|
<para>
|
|
PostgreSQL can be built on SCO UnixWare 7 and SCO OpenServer 5.
|
|
On OpenServer, you can use either the OpenServer Development Kit
|
|
or the Universal Development Kit. However, some tweaking may be
|
|
needed, as described below.
|
|
</para>
|
|
|
|
<sect3>
|
|
<title>Skunkware</title>
|
|
|
|
<para>
|
|
You should locate your copy of the SCO Skunkware CD. The
|
|
Skunkware CD is included with UnixWare 7 and current versions of
|
|
OpenServer 5. Skunkware includes ready-to-install versions of
|
|
many popular programs that are available on the Internet. For
|
|
example, gzip, gunzip, GNU Make, Flex, and Bison are all
|
|
included. For UnixWare 7.1, this CD is now labeled "Open License
|
|
Software Supplement". If you do not have this CD, the software
|
|
on it is available
|
|
from <ulink url="http://www.sco.com/skunkware/"></ulink>.
|
|
</para>
|
|
|
|
<para>
|
|
Skunkware has different versions for UnixWare and OpenServer.
|
|
Make sure you install the correct version for your operating
|
|
system, except as noted below.
|
|
</para>
|
|
|
|
<para>
|
|
On UnixWare 7.1.3 and beyond, the GCC compiler is included on the
|
|
UDK CD as is GNU Make.
|
|
</para>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>GNU Make</title>
|
|
|
|
<para>
|
|
You need to use the GNU Make program, which is on the Skunkware
|
|
CD. By default, it installs
|
|
as <filename>/usr/local/bin/make</filename>. To avoid confusion
|
|
with the SCO <filename>make</filename> program, you may want to rename GNU <filename>make</filename> to
|
|
<filename>gmake</filename>.
|
|
</para>
|
|
|
|
<para>
|
|
As of UnixWare 7.1.3 and above, the GNU Make program is the
|
|
OSTK portion of the UDK CD, and is
|
|
in <filename>/usr/gnu/bin/gmake</filename>.
|
|
</para>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>Readline</title>
|
|
|
|
<para>
|
|
The Readline library is on the Skunkware CD. But it is not
|
|
included on the UnixWare 7.1 Skunkware CD. If you have the
|
|
UnixWare 7.0.0 or 7.0.1 Skunkware CDs, you can install it from
|
|
there. Otherwise,
|
|
try <ulink url="http://www.sco.com/skunkware/"></ulink>.
|
|
</para>
|
|
|
|
<para>
|
|
By default, Readline installs into <filename>/usr/local/lib</> and
|
|
<filename>/usr/local/include</>. However, the
|
|
PostgreSQL <command>configure</command> program will not find it
|
|
there without help. If you installed Readline, then use the
|
|
following options to <command>configure</command>:
|
|
<programlisting>
|
|
./configure --with-libraries=/usr/local/lib --with-includes=/usr/local/include
|
|
</programlisting>
|
|
</para>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>Using the UDK on OpenServer</title>
|
|
|
|
<para>
|
|
If you are using the new Universal Development Kit (UDK) compiler
|
|
on OpenServer, you need to specify the locations of the UDK
|
|
libraries:
|
|
<programlisting>
|
|
./configure --with-libraries=/udk/usr/lib --with-includes=/udk/usr/include
|
|
</programlisting>
|
|
Putting these together with the Readline options from above:
|
|
<programlisting>
|
|
./configure --with-libraries="/udk/usr/lib /usr/local/lib" --with-includes="/udk/usr/include /usr/local/include"
|
|
</programlisting>
|
|
</para>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>Reading the PostgreSQL Man Pages</title>
|
|
|
|
<para>
|
|
By default, the PostgreSQL man pages are installed into
|
|
<filename>/usr/local/pgsql/man</filename>. By default, UnixWare
|
|
does not look there for man pages. To be able to read them you
|
|
need to modify the
|
|
<varname>MANPATH</varname> variable
|
|
in <filename>/etc/default/man</filename>, for example:
|
|
<programlisting>
|
|
MANPATH=/usr/lib/scohelp/%L/man:/usr/dt/man:/usr/man:/usr/share/man:scohelp:/usr/local/man:/usr/local/pgsql/man
|
|
</programlisting>
|
|
</para>
|
|
|
|
<para>
|
|
On OpenServer, some extra research needs to be invested to make
|
|
the man pages usable, because the man system is a bit different
|
|
from other platforms. Currently, PostgreSQL will not install
|
|
them at all.
|
|
</para>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>C99 Issues with the 7.1.1b Feature Supplement</title>
|
|
|
|
<para>
|
|
For compilers earlier than the one released with OpenUNIX 8.0.0
|
|
(UnixWare 7.1.2), including the 7.1.1b Feature Supplement, you
|
|
may need to specify <option>-Xb</option>
|
|
in <varname>CFLAGS</varname> or the <varname>CC</varname>
|
|
environment variable. The indication of this is an error in
|
|
compiling <filename>tuplesort.c</filename> referencing inline
|
|
functions. Apparently there was a change in the 7.1.2(8.0.0)
|
|
compiler and beyond.
|
|
</para>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>Threading on UnixWare</title>
|
|
|
|
<para>
|
|
For threading, you<emphasis>must</emphasis> use <option>-Kpthread</option>
|
|
on <emphasis>all</emphasis> libpq-using programs. libpq
|
|
uses <function>pthread_*</function> calls, which are only
|
|
available with the
|
|
<option>-Kpthread</>/<option>-Kthread</> flag.
|
|
</para>
|
|
</sect3>
|
|
</sect2>
|
|
|
|
<sect2 id="installation-notes-solaris">
|
|
<title>Solaris</title>
|
|
|
|
<indexterm zone="installation-notes-solaris">
|
|
<primary>Solaris</primary>
|
|
<secondary>installation on</secondary>
|
|
</indexterm>
|
|
|
|
<para>
|
|
PostgreSQL is well-supported on Solaris. The more up to date your
|
|
operating system, the fewer issues you will experience; details
|
|
below.
|
|
</para>
|
|
|
|
<sect3>
|
|
<title>Required Tools</title>
|
|
|
|
<para>
|
|
You can build with either GCC or Sun's compiler suite. For
|
|
better code optimization, Sun's compiler is strongly recommended
|
|
on the SPARC architecture. We have heard reports of problems
|
|
when using GCC 2.95.1; GCC 2.95.3 or later is recommended. If
|
|
you are using Sun's compiler, be careful not to select
|
|
<filename>/usr/ucb/cc</filename>;
|
|
use <filename>/opt/SUNWspro/bin/cc</filename>.
|
|
</para>
|
|
|
|
<para>
|
|
You can download Sun Studio
|
|
from <ulink url="http://developers.sun.com/sunstudio/downloads/"></ulink>.
|
|
Many of GNU tools are integrated into Solaris 10, or they are
|
|
present on the Solaris companion CD. If you like packages for
|
|
older version of Solaris, you can find these tools
|
|
at <ulink url="http://www.sunfreeware.com"></ulink>
|
|
or <ulink url="http://www.blastwave.org"></ulink>. If you prefer
|
|
sources, look
|
|
at <ulink url="http://www.gnu.org/order/ftp.html"></ulink>.
|
|
</para>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>Problems with OpenSSL</title>
|
|
|
|
<para>
|
|
When you build PostgreSQL with OpenSSL support you might get
|
|
compilation errors in the following files:
|
|
<itemizedlist>
|
|
<listitem><para><filename>src/backend/libpq/crypt.c</filename></para></listitem>
|
|
<listitem><para><filename>src/backend/libpq/password.c</filename></para></listitem>
|
|
<listitem><para><filename>src/interfaces/libpq/fe-auth.c</filename></para></listitem>
|
|
<listitem><para><filename>src/interfaces/libpq/fe-connect.c</filename></para></listitem>
|
|
</itemizedlist>
|
|
|
|
This is because of a namespace conflict between the standard
|
|
<filename>/usr/include/crypt.h</filename> header and the header
|
|
files provided by OpenSSL.
|
|
</para>
|
|
|
|
<para>
|
|
Upgrading your OpenSSL installation to version 0.9.6a fixes this
|
|
problem. Solaris 9 and above has a newer version of OpenSSL.
|
|
</para>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>configure Complains About a Failed Test Program</title>
|
|
|
|
<para>
|
|
If <command>configure</command> complains about a failed test
|
|
program, this is probably a case of the run-time linker being
|
|
unable to find some library, probably libz, libreadline or some
|
|
other non-standard library such as libssl. To point it to the
|
|
right location, set the <envar>LDFLAGS</envar> environment
|
|
variable on the <command>configure</command> command line, e.g.,
|
|
<programlisting>
|
|
configure ... LDFLAGS="-R /usr/sfw/lib:/opt/sfw/lib:/usr/local/lib"
|
|
</programlisting>
|
|
See
|
|
the <citerefentry><refentrytitle>ld</><manvolnum>1</></citerefentry>
|
|
man page for more information.
|
|
</para>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>64-bit Build Sometimes Crashes</title>
|
|
|
|
<para>
|
|
On Solaris 7 and older, the 64-bit version of libc has a buggy
|
|
<function>vsnprintf</function> routine, which leads to erratic
|
|
core dumps in PostgreSQL. The simplest known workaround is to
|
|
force PostgreSQL to use its own version of <function>vsnprintf</function> rather than
|
|
the library copy. To do this, after you
|
|
run <command>configure</command> edit a file produced by
|
|
<command>configure</command>:
|
|
In <filename>src/Makefile.global</filename>, change the line
|
|
<programlisting>
|
|
LIBOBJS =
|
|
</programlisting>
|
|
to read
|
|
<programlisting>
|
|
LIBOBJS = snprintf.o
|
|
</programlisting>
|
|
(There might be other files already listed in this variable.
|
|
Order does not matter.) Then build as usual.
|
|
</para>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>Compiling for Optimal Performance</title>
|
|
|
|
<para>
|
|
On the SPARC architecture, Sun Studio is strongly recommended for
|
|
compilation. Try using the <option>-xO5</option> optimization
|
|
flag to generate significantly faster binaries. Do not use any
|
|
flags that modify behavior of floating-point operations
|
|
and <varname>errno</varname> processing (e.g.,
|
|
<option>-fast</option>). These flags could raise some
|
|
nonstandard PostgreSQL behavior for example in the date/time
|
|
computing.
|
|
</para>
|
|
|
|
<para>
|
|
If you do not have a reason to use 64-bit binaries on SPARC,
|
|
prefer the 32-bit version. The 64-bit operations are slower and
|
|
64-bit binaries are slower than the 32-bit variants. And on
|
|
other hand, 32-bit code on the AMD64 CPU family is not native,
|
|
and that is why 32-bit code is significant slower on this CPU
|
|
family.
|
|
</para>
|
|
|
|
<para>
|
|
Some tricks for tuning PostgreSQL and Solaris for performance can
|
|
be found
|
|
at <ulink url="http://www.sun.com/servers/coolthreads/tnb/applications_postgresql.jsp"></ulink>.
|
|
This article is primary focused on T2000 platform, but many of
|
|
the recommendations are also useful on other hardware with
|
|
Solaris.
|
|
</para>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>Using DTrace for Tracing PostgreSQL</title>
|
|
|
|
<para>
|
|
Yes, using DTrace is possible. See <![%standalone-include[the
|
|
documentation]]>
|
|
<![%standalone-ignore[<xref linkend="dynamic-trace">]]> for further
|
|
information. You can also find more information in this
|
|
article: <ulink url="http://blogs.sun.com/robertlor/entry/user_level_dtrace_probes_in"></ulink>.
|
|
</para>
|
|
|
|
<para>
|
|
If you see the linking of the <command>postgres</command> executable abort with an
|
|
error message like:
|
|
<screen>
|
|
Undefined first referenced
|
|
symbol in file
|
|
AbortTransaction utils/probes.o
|
|
CommitTransaction utils/probes.o
|
|
ld: fatal: Symbol referencing errors. No output written to postgres
|
|
collect2: ld returned 1 exit status
|
|
gmake: *** [postgres] Error 1
|
|
</screen>
|
|
your DTrace installation is too old to handle probes in static
|
|
functions. You need Solaris 10u4 or newer.
|
|
</para>
|
|
</sect3>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
</chapter>
|