diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml index 31ed516ac28..1f2f7d9957d 100644 --- a/doc/src/sgml/installation.sgml +++ b/doc/src/sgml/installation.sgml @@ -327,12 +327,12 @@ su - postgres 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 + 350 MB for the source tree during compilation and about 60 MB for the installation directory. An empty database cluster takes about - 35 MB; databases take about five times the amount of space that a + 40 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 df command to check free disk + 300 MB. Use the df command to check free disk space. @@ -351,8 +351,11 @@ su - postgres gunzip postgresql-&version;.tar.gz tar xf postgresql-&version;.tar - (Use bunzip2 instead of gunzip if you - have the .bz2 file.) + (Use bunzip2 instead of gunzip if + you have the .bz2 file. Also, note that most + modern versions of tar can unpack compressed archives + directly, so you don't really need the + separate gunzip or bunzip2 step.) This will create a directory postgresql-&version; under the current directory with the PostgreSQL sources. @@ -389,10 +392,14 @@ su - postgres 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 - configure in a directory outside the source - tree, if you want to keep the build directory separate. This - procedure is also called a + build tree to record what it found. + + + + You can also run configure in a directory outside + the source tree, and then build there, if you want to keep the build + directory separate from the original source files. This procedure is + called a VPATHVPATH build. Here's how: @@ -412,1176 +419,19 @@ su - postgres You can customize the build and installation process by supplying one - or more of the following command line options to - configure: - - - - - - - Install all files under the directory PREFIX - instead of /usr/local/pgsql. The actual - files will be installed into various subdirectories; no files - will ever be installed directly into the - PREFIX directory. - - - - 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 man and doc - locations are not affected by this.) - - - - For relocatable installs, you might want to use - configure's --disable-rpath - option. Also, you will need to tell the operating system how - to find the shared libraries. - - - - - - - - - You can install architecture-dependent files under a - different prefix, EXEC-PREFIX, than what - PREFIX was set to. This can be useful to - share architecture-independent files between hosts. If you - omit this, then EXEC-PREFIX is set equal to - PREFIX and both architecture-dependent and - independent files will be installed under the same tree, - which is probably what you want. - - - - - - - - - Specifies the directory for executable programs. The default - is EXEC-PREFIX/bin, which - normally means /usr/local/pgsql/bin. - - - - - - - - - Sets the directory for various configuration files, - PREFIX/etc by default. - - - - - - - - - Sets the location to install libraries and dynamically loadable - modules. The default is - EXEC-PREFIX/lib. - - - - - - - - - Sets the directory for installing C and C++ header files. The - default is PREFIX/include. - - - - - - - - - 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 - PREFIX/share. - - - - - - - - - Sets the directory for read-only data files used by the - installed programs. The default is - DATAROOTDIR. Note that this has - nothing to do with where your database files will be placed. - - - - - - - - - Sets the directory for installing locale data, in particular - message translation catalog files. The default is - DATAROOTDIR/locale. - - - - - - - - - The man pages that come with PostgreSQL will be installed under - this directory, in their respective - manx subdirectories. - The default is DATAROOTDIR/man. - - - - - - - - - Sets the root directory for installing documentation files, - except man pages. This only sets the default for - the following options. The default value for this option is - DATAROOTDIR/doc/postgresql. - - - - - - - - - The HTML-formatted documentation for - PostgreSQL will be installed under - this directory. The default is - DATAROOTDIR. - - - - - - - - Care has been taken to make it possible to install - PostgreSQL into shared installation locations - (such as /usr/local/include) without - interfering with the namespace of the rest of the system. First, - the string /postgresql is - automatically appended to datadir, - sysconfdir, and docdir, - unless the fully expanded directory name already contains the - string postgres or - pgsql. For example, if you choose - /usr/local as prefix, the documentation will - be installed in /usr/local/doc/postgresql, - but if the prefix is /opt/postgres, then it - will be in /opt/postgres/doc. The public C - header files of the client interfaces are installed into - includedir and are namespace-clean. The - internal header files and the server header files are installed - into private directories under includedir. 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 libdir - for dynamically loadable modules. - - - - - - - - - - - Append STRING to the PostgreSQL version number. You - can use this, for example, to mark binaries built from unreleased Git - snapshots or containing custom patches with an extra version string - such as a git describe identifier or a - distribution package release number. - - - - - - - - - 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 Readline) installed in a non-standard - location, - you have to use this option and probably also the corresponding - option. - - - Example: --with-includes=/opt/gnu/include:/usr/sup/include. - - - - - - - - - DIRECTORIES is a colon-separated list of - directories to search for libraries. You will probably have - to use this option (and the corresponding - option) if you have packages - installed in non-standard locations. - - - Example: --with-libraries=/opt/gnu/lib:/usr/sup/lib. - - - - - - - - - Enables Native Language Support (NLS), - that is, the ability to display a program's messages in a - language other than English. - LANGUAGES is an optional space-separated - list of codes of the languages that you want supported, for - example --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. - - - - To use this option, you will need an implementation of the - Gettext API; see above. - - - - - - - - - Set 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 - PostgreSQL servers on the same machine. - - - - - - - - - Build the PL/Perl server-side language. - - - - - - - - - Build the PL/Python server-side language. - - - - - - - - - Build the PL/Tcl server-side language. - - - - - - - - - Tcl installs the file tclConfig.sh, 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. - - - - - - - - - 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., /usr/include, - /usr/lib), so you must use the options - and in - addition to this option. configure will check - for the required header files and libraries to make sure that - your GSSAPI installation is sufficient before proceeding. - - - - - - - - - The default name of the Kerberos service principal used - by GSSAPI. - postgres 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 - POSTGRES. - - - - - - - - - Build with support for LLVM based - JIT compilation (see ). This - requires the LLVM library to be installed. - The minimum required version of LLVM is - currently 3.9. - - - llvm-configllvm-config - will be used to find the required compilation options. - llvm-config, and then - llvm-config-$major-$minor for all supported - versions, will be searched on PATH. If that would not - yield the correct binary, use LLVM_CONFIG to specify a - path to the correct llvm-config. For example - -./configure ... --with-llvm LLVM_CONFIG='/path/to/llvm/bin/llvm-config' - - - - - LLVM support requires a compatible - clang compiler (specified, if necessary, using the - CLANG environment variable), and a working C++ - compiler (specified, if necessary, using the CXX - environment variable). - - - - - - - - - Build with support for - the ICUICU - library. This requires the ICU4C package - to be installed. The minimum required version - of ICU4C is currently 4.2. - - - - By default, - pkg-configpkg-config - will be used to find the required compilation options. This is - supported for ICU4C version 4.6 and later. - For older versions, or if pkg-config is - not available, the variables ICU_CFLAGS - and ICU_LIBS can be specified - to configure, like in this example: - -./configure ... --with-icu ICU_CFLAGS='-I/some/where/include' ICU_LIBS='-L/some/where/lib -licui18n -licuuc -licudata' - - (If ICU4C is in the default search path - for the compiler, then you still need to specify a nonempty string in - order to avoid use of pkg-config, for - example, ICU_CFLAGS=' '.) - - - - - - - - OpenSSL - SSL - - - - - Build with support for SSL (encrypted) - connections. This requires the OpenSSL - package to be installed. configure will check - for the required header files and libraries to make sure that - your OpenSSL installation is sufficient - before proceeding. - - - - - - - - - Build with PAMPAM - (Pluggable Authentication Modules) support. - - - - - - - - - Build with BSD Authentication support. - (The BSD Authentication framework is - currently only available on OpenBSD.) - - - - - - - - - Build with LDAPLDAP - support for authentication and connection parameter lookup (see - and - for more information). On Unix, - this requires the OpenLDAP package to be - installed. On Windows, the default WinLDAP - library is used. configure will check for the required - header files and libraries to make sure that your - OpenLDAP installation is sufficient before - proceeding. - - - - - - - - - Build with support - for systemdsystemd - service notifications. This improves integration if the server binary - is started under systemd but has no impact - otherwise; see for more - information. libsystemd and the - associated header files need to be installed to be able to use this - option. - - - - - - - - - Prevents use of the Readline library - (and libedit as well). This option disables - command-line editing and history in - psql, so it is not recommended. - - - - - - - - - Favors the use of the BSD-licensed libedit library - rather than GPL-licensed Readline. This option - is significant only if you have both libraries installed; the - default in that case is to use Readline. - - - - - - - - - Build with Bonjour support. This requires Bonjour support - in your operating system. Recommended on macOS. - - - - - - - - - Build the module - (which provides functions to generate UUIDs), using the specified - UUID library.UUID - LIBRARY must be one of: - - - - - to use the UUID functions found in FreeBSD, NetBSD, - and some other BSD-derived systems - - - - - to use the UUID library created by - the e2fsprogs project; this library is present in most - Linux systems and in macOS, and can be obtained for other - platforms as well - - - - - to use the OSSP UUID library - - - - - - - - - - - Obsolete equivalent of --with-uuid=ossp. - - - - - - - - - Build with libxml (enables SQL/XML support). Libxml version 2.6.23 or - later is required for this feature. - - - - Libxml installs a program xml2-config 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 - XML2_CONFIG to point to the - xml2-config program belonging to the - installation, or use the options - and - . - - - - - - - - - Use libxslt when building the - - module. xml2 relies on this library - to perform XSL transformations of XML. - - - - - - - - - Disable passing float4 values by value, causing them - to be passed 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 - version 0 calling convention. A better long-term - solution is to update any such functions to use the - version 1 calling convention. - - - - - - - - - Disable passing float8 values by value, causing them - to be passed 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 - version 0 calling convention. A better long-term - solution is to update any such functions to use the - 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, is the default - and it is not allowed to select . - - - - - - - - - Set the 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 - 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 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. - - - - - - - - - Set the 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. - - - - - - - - - Set the 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. - - - - - - - - - Allow the build to succeed even if 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 PostgreSQL on - your platform, please report the problem to the - PostgreSQL developers. - - - - - - - - - Disable the thread-safety of client libraries. This prevents - concurrent threads in libpq and - ECPG programs from safely controlling - their private connection handles. - - - - - - - - time zone data - - - - - 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 DIRECTORY is used instead of the one - included in the PostgreSQL source distribution. - DIRECTORY must be specified as an - absolute path. /usr/share/zoneinfo 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 PostgreSQL. - - - cross compilation - - - 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. - - - - - - - - - - zlib - - Prevents use of the Zlib library. This disables - support for compressed archives in pg_dump - and pg_restore. - This option is only intended for those rare systems where this - library is not available. - - - - - - - - - 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. - - - - - - - - - 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. - See - for more information. This option is for use only with GCC - and when doing development work. - - - - - - - - - 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 gmon.out file for use in profiling. - This option is for use only with GCC and when doing development work. - - - - - - - - - Enables assertion checks in the server, which test for - many 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. - - - - - - - - - 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. - - - - - - - - - - DTrace - - Compiles PostgreSQL with support for the - dynamic tracing tool DTrace. - See - for more information. - - - - To point to the dtrace program, the - environment variable DTRACE can be set. This - will often be necessary because dtrace is - typically installed under /usr/sbin, - which might not be in the path. - - - - Extra command-line options for the dtrace program - can be specified in the environment variable - DTRACEFLAGS. On Solaris, - to include DTrace support in a 64-bit binary, you must specify - DTRACEFLAGS="-64" to configure. For example, - using the GCC compiler: - -./configure CC='gcc -m64' --enable-dtrace DTRACEFLAGS='-64' ... - - Using Sun's compiler: - -./configure CC='/opt/SUNWspro/bin/cc -xtarget=native64' --enable-dtrace DTRACEFLAGS='-64' ... - - - - - - - - - - Enable tests using the Perl TAP tools. This requires a Perl - installation and the Perl module IPC::Run. - See for more information. - - - - - - - - If you prefer a C compiler different from the one - configure picks, you can set the - environment variable CC to the program of your choice. - By default, configure will pick - gcc if available, else the platform's - default (usually cc). Similarly, you can override the - default compiler flags if needed with the CFLAGS variable. - - - - You can specify environment variables on the - configure command line, for example: - -./configure CC=/opt/bin/gcc CFLAGS='-O2 -pipe' - - - - - Here is a list of the significant variables that can be set in - this manner: - - - - BISON - - - Bison program - - - - - - CC - - - C compiler - - - - - - CFLAGS - - - options to pass to the C compiler - - - - - - CLANG - - - path to clang program used to process source code - for inlining when compiling with --with-llvm - - - - - - CPP - - - C preprocessor - - - - - - CPPFLAGS - - - options to pass to the C preprocessor - - - - - - CXX - - - C++ compiler - - - - - - CXXFLAGS - - - options to pass to the C++ compiler - - - - - - DTRACE - - - location of the dtrace program - - - - - - DTRACEFLAGS - - - options to pass to the dtrace program - - - - - - FLEX - - - Flex program - - - - - - LDFLAGS - - - options to use when linking either executables or shared libraries - - - - - - LDFLAGS_EX - - - additional options for linking executables only - - - - - - LDFLAGS_SL - - - additional options for linking shared libraries only - - - - - - LLVM_CONFIG - - - llvm-config program used to locate the - LLVM installation. - - - - - - MSGFMT - - - msgfmt program for native language support - - - - - - PERL - - - Perl interpreter program. This will be used to determine the - dependencies for building PL/Perl. The default is - perl. - - - - - - PYTHON - - - Python interpreter program. 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 - - for more information. If this is not set, the following are probed - in this order: python python3 python2. - - - - - - TCLSH - - - Tcl interpreter program. This will be used to - determine the dependencies for building PL/Tcl, and it will - be substituted into Tcl scripts. - - - - - - XML2_CONFIG - - - xml2-config program used to locate the - libxml installation. - - - - - - - - Sometimes it is useful to add compiler flags after-the-fact to the set - that were chosen by configure. An important example is - that gcc's option cannot be included - in the CFLAGS passed to configure, because - it will break many of configure's built-in tests. To add - such flags, include them in the COPT environment variable - while running make. The contents of COPT - are added to both the CFLAGS and LDFLAGS - options set up by configure. For example, you could do - -make COPT='-Werror' - - or - -export COPT='-Werror' -make - - - - - - When developing code inside the server, it is recommended to - use the configure options (which - turns on many run-time error checks) and - (which improves the usefulness of debugging tools). - - - - If using GCC, it is best to build with an optimization level of - at least , because using no optimization - () 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 - . An easy way to do this is by passing an option - to make: make PROFILE=-O0 file.o. - - - - The COPT and PROFILE environment variables are - actually handled identically by the PostgreSQL - makefiles. Which to use is a matter of preference, but a common habit - among developers is to use PROFILE for one-time flag - adjustments, while COPT might be kept set all the time. - - - + or more command line options to configure. + Typically you would customize the install location, or the set of + optional features that are built. configure + has a large number of options, which are described in + . + + + + Also, configure responds to certain environment + variables, as described in . + These provide additional ways to customize the configuration. + + Build @@ -1762,12 +612,1331 @@ build-postgresql: rebuilding. Without this, your changes in configuration choices might not propagate everywhere they need to. + + + <filename>configure</filename> Options + + + configure options + + + + configure's command line options are explained below. + This list is not exhaustive (use ./configure --help + to get one that is). The options not covered here are meant for + advanced use-cases such as cross-compilation, and are documented in + the standard Autoconf documentation. + + + + Installation Locations + + + These options control where make install will put + the files. The option is sufficient for + most cases. If you have special needs, you can customize the + installation subdirectories with the other options described in this + section. Beware however that changing the relative locations of the + different subdirectories may render the installation non-relocatable, + meaning you won't be able to move it after installation. + (The man and doc locations are + not affected by this restriction.) For relocatable installs, you + might want to use the --disable-rpath option + described later. + + + + + + + + Install all files under the directory PREFIX + instead of /usr/local/pgsql. The actual + files will be installed into various subdirectories; no files + will ever be installed directly into the + PREFIX directory. + + + + + + + + + You can install architecture-dependent files under a + different prefix, EXEC-PREFIX, than what + PREFIX was set to. This can be useful to + share architecture-independent files between hosts. If you + omit this, then EXEC-PREFIX is set equal to + PREFIX and both architecture-dependent and + independent files will be installed under the same tree, + which is probably what you want. + + + + + + + + + Specifies the directory for executable programs. The default + is EXEC-PREFIX/bin, which + normally means /usr/local/pgsql/bin. + + + + + + + + + Sets the directory for various configuration files, + PREFIX/etc by default. + + + + + + + + + Sets the location to install libraries and dynamically loadable + modules. The default is + EXEC-PREFIX/lib. + + + + + + + + + Sets the directory for installing C and C++ header files. The + default is PREFIX/include. + + + + + + + + + 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 + PREFIX/share. + + + + + + + + + Sets the directory for read-only data files used by the + installed programs. The default is + DATAROOTDIR. Note that this has + nothing to do with where your database files will be placed. + + + + + + + + + Sets the directory for installing locale data, in particular + message translation catalog files. The default is + DATAROOTDIR/locale. + + + + + + + + + The man pages that come with PostgreSQL will be installed under + this directory, in their respective + manx subdirectories. + The default is DATAROOTDIR/man. + + + + + + + + + Sets the root directory for installing documentation files, + except man pages. This only sets the default for + the following options. The default value for this option is + DATAROOTDIR/doc/postgresql. + + + + + + + + + The HTML-formatted documentation for + PostgreSQL will be installed under + this directory. The default is + DATAROOTDIR. + + + + + + + + Care has been taken to make it possible to install + PostgreSQL into shared installation locations + (such as /usr/local/include) without + interfering with the namespace of the rest of the system. First, + the string /postgresql is + automatically appended to datadir, + sysconfdir, and docdir, + unless the fully expanded directory name already contains the + string postgres or + pgsql. For example, if you choose + /usr/local as prefix, the documentation will + be installed in /usr/local/doc/postgresql, + but if the prefix is /opt/postgres, then it + will be in /opt/postgres/doc. The public C + header files of the client interfaces are installed into + includedir and are namespace-clean. The + internal header files and the server header files are installed + into private directories under includedir. 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 libdir + for dynamically loadable modules. + + + + + + + <productname>PostgreSQL</productname> Features + + + The options described in this section enable building of + various PostgreSQL features that are not + built by default. Most of these are non-default only because they + require additional software, as described in + . + + + + + + + + + Enables Native Language Support (NLS), + that is, the ability to display a program's messages in a + language other than English. + LANGUAGES is an optional space-separated + list of codes of the languages that you want supported, for + example --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. + + + + To use this option, you will need an implementation of the + Gettext API. + + + + + + + + + Build the PL/Perl server-side language. + + + + + + + + + Build the PL/Python server-side language. + + + + + + + + + Build the PL/Tcl server-side language. + + + + + + + + + Tcl installs the file tclConfig.sh, 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 tclConfig.sh. + + + + + + + + + Build with support for + the ICUICU + library, enabling use of ICU collation + features (see + ). + This requires the ICU4C package + to be installed. The minimum required version + of ICU4C is currently 4.2. + + + + By default, + pkg-configpkg-config + will be used to find the required compilation options. This is + supported for ICU4C version 4.6 and later. + For older versions, or if pkg-config is + not available, the variables ICU_CFLAGS + and ICU_LIBS can be specified + to configure, like in this example: + +./configure ... --with-icu ICU_CFLAGS='-I/some/where/include' ICU_LIBS='-L/some/where/lib -licui18n -licuuc -licudata' + + (If ICU4C is in the default search path + for the compiler, then you still need to specify nonempty strings in + order to avoid use of pkg-config, for + example, ICU_CFLAGS=' '.) + + + + + + + + + Build with support for LLVM based + JIT compilation (see ). This + requires the LLVM library to be installed. + The minimum required version of LLVM is + currently 3.9. + + + llvm-configllvm-config + will be used to find the required compilation options. + llvm-config, and then + llvm-config-$major-$minor for all supported + versions, will be searched for in your PATH. If + that would not yield the desired program, + use LLVM_CONFIG to specify a path to the + correct llvm-config. For example + +./configure ... --with-llvm LLVM_CONFIG='/path/to/llvm/bin/llvm-config' + + + + + LLVM support requires a compatible + clang compiler (specified, if necessary, using the + CLANG environment variable), and a working C++ + compiler (specified, if necessary, using the CXX + environment variable). + + + + + + + + OpenSSL + SSL + + + + + Build with support for SSL (encrypted) + connections. This requires the OpenSSL + package to be installed. configure will check + for the required header files and libraries to make sure that + your OpenSSL installation is sufficient + before proceeding. + + + + + + + + + Build with support for GSSAPI authentication. On many systems, the + GSSAPI system (usually a part of the Kerberos installation) is not + installed in a location + that is searched by default (e.g., /usr/include, + /usr/lib), so you must use the options + and in + addition to this option. configure will check + for the required header files and libraries to make sure that + your GSSAPI installation is sufficient before proceeding. + + + + + + + + + Build with LDAPLDAP + support for authentication and connection parameter lookup (see + and + for more information). On Unix, + this requires the OpenLDAP package to be + installed. On Windows, the default WinLDAP + library is used. configure will check for the required + header files and libraries to make sure that your + OpenLDAP installation is sufficient before + proceeding. + + + + + + + + + Build with PAMPAM + (Pluggable Authentication Modules) support. + + + + + + + + + Build with BSD Authentication support. + (The BSD Authentication framework is + currently only available on OpenBSD.) + + + + + + + + + Build with support + for systemdsystemd + service notifications. This improves integration if the server + is started under systemd but has no impact + otherwise; see for more + information. libsystemd and the + associated header files need to be installed to use this option. + + + + + + + + + Build with support for Bonjour automatic service discovery. + This requires Bonjour support in your operating system. + Recommended on macOS. + + + + + + + + + Build the module + (which provides functions to generate UUIDs), using the specified + UUID library.UUID + LIBRARY must be one of: + + + + + to use the UUID functions found in FreeBSD, NetBSD, + and some other BSD-derived systems + + + + + to use the UUID library created by + the e2fsprogs project; this library is present in most + Linux systems and in macOS, and can be obtained for other + platforms as well + + + + + to use the OSSP UUID library + + + + + + + + + + + Obsolete equivalent of --with-uuid=ossp. + + + + + + + + + Build with libxml, enabling SQL/XML support. Libxml version 2.6.23 or + later is required for this feature. + + + + Libxml installs a program xml2-config 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 + XML2_CONFIG to point to the + xml2-config program belonging to the + installation, or use the options + and + . + + + + + + + + + Build with libxslt, enabling the + + module to perform XSL transformations of XML. + must be specified as well. + + + + + + + + + + Anti-Features + + + The options described in this section allow disabling + certain PostgreSQL features that are built + by default, but which might need to be turned off if the required + software or system features are not available. Using these options is + not recommended unless really necessary. + + + + + + + + + Prevents use of the Readline library + (and libedit as well). This option disables + command-line editing and history in + psql. + + + + + + + + + Favors the use of the BSD-licensed libedit library + rather than GPL-licensed Readline. This option + is significant only if you have both libraries installed; the + default in that case is to use Readline. + + + + + + + + + + zlib + + Prevents use of the Zlib library. + This disables + support for compressed archives in pg_dump + and pg_restore. + + + + + + + + + Disable passing float4 values by value, causing them + to be passed by reference instead. This option costs + performance, but may be needed for compatibility with very old + user-defined functions written in C. + + + + + + + + + Disable passing float8 values by value, causing them + to be passed by reference instead. This option costs + performance, but may be needed for compatibility with very old + user-defined functions written in C. + Note that this option affects not only float8, but also int8 and some + related types such as timestamp. + On 32-bit platforms, is the default + and it is not allowed to select . + + + + + + + + + Allow the build to succeed even if PostgreSQL + has no CPU spinlock support for the platform. The lack of + spinlock support will result in very 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 PostgreSQL on + your platform, please report the problem to the + PostgreSQL developers. + + + + + + + + + Disable use of CPU atomic operations. This option does nothing on + platforms that lack such operations. On platforms that do have + them, this will result in poor performance. This option is only + useful for debugging or making performance comparisons. + + + + + + + + + Disable the thread-safety of client libraries. This prevents + concurrent threads in libpq and + ECPG programs from safely controlling + their private connection handles. Use this only on platforms + with deficient threading support. + + + + + + + + + + Build Process Details + + + + + + + + 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 Readline) installed in a non-standard + location, + you have to use this option and probably also the corresponding + option. + + + Example: --with-includes=/opt/gnu/include:/usr/sup/include. + + + + + + + + + DIRECTORIES is a colon-separated list of + directories to search for libraries. You will probably have + to use this option (and the corresponding + option) if you have packages + installed in non-standard locations. + + + Example: --with-libraries=/opt/gnu/lib:/usr/sup/lib. + + + + + + + + time zone data + + + + + 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 DIRECTORY is used instead of the one + included in the PostgreSQL source distribution. + DIRECTORY must be specified as an + absolute path. /usr/share/zoneinfo 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 PostgreSQL. + + + cross compilation + + + 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. + + + + + + + + + Append STRING to the PostgreSQL version number. You + can use this, for example, to mark binaries built from unreleased Git + snapshots or containing custom patches with an extra version string, + such as a git describe identifier or a + distribution package release number. + + + + + + + + + Do not mark PostgreSQL's executables + to indicate that they should search for shared libraries in the + installation's library directory (see ). + On most platforms, this marking uses an absolute path to the + library directory, so that it will be unhelpful if you relocate + the installation later. However, you will then need to provide + some other way for the executables to find the shared libraries. + Typically this requires configuring the operating system's + dynamic linker to search the library directory; see + for more detail. + + + + + + + + + + Miscellaneous + + + It's fairly common, particularly for test builds, to adjust the + default port number with . + The other options in this section are recommended only for advanced + users. + + + + + + + + + Set 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 + PostgreSQL servers on the same machine. + + + + + + + + + The default name of the Kerberos service principal used + by GSSAPI. + postgres is the default. There's usually no + reason to change this unless you are building for a Windows + environment, in which case it must be set to upper case + POSTGRES. + + + + + + + + + Set the 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 + 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 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 breaks on-disk database compatibility, + meaning you cannot use pg_upgrade to upgrade to + a build with a different segment size. + + + + + + + + + Set the 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 breaks on-disk database compatibility, + meaning you cannot use pg_upgrade to upgrade to + a build with a different block size. + + + + + + + + + Set the 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 breaks on-disk database compatibility, + meaning you cannot use pg_upgrade to upgrade to + a build with a different WAL block size. + + + + + + + + + + Developer Options + + + Most of the options in this section are only of interest for + developing or debugging PostgreSQL. + They are not recommended for production builds, except + for , which can be useful to enable + detailed bug reports in the unlucky event that you encounter a bug. + On platforms supporting DTrace, + may also be reasonable to use in production. + + + + When building an installation that will be used to develop code inside + the server, it is recommended to use at least the + options + and . + + + + + + + + + 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. + + + + + + + + + Enables assertion checks in the server, which test for + many 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. + + + + + + + + + Enable tests using the Perl TAP tools. This requires a Perl + installation and the Perl module IPC::Run. + See for more information. + + + + + + + + + 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. + + + + + + + + + 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. + See + for more information. This option is for use only with GCC + and when doing development work. + + + + + + + + + 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 gmon.out file containing + profile data. + This option is for use only with GCC and when doing development work. + + + + + + + + + + DTrace + + Compiles PostgreSQL with support for the + dynamic tracing tool DTrace. + See + for more information. + + + + To point to the dtrace program, the + environment variable DTRACE can be set. This + will often be necessary because dtrace is + typically installed under /usr/sbin, + which might not be in your PATH. + + + + Extra command-line options for the dtrace program + can be specified in the environment variable + DTRACEFLAGS. On Solaris, + to include DTrace support in a 64-bit binary, you must specify + DTRACEFLAGS="-64". For example, + using the GCC compiler: + +./configure CC='gcc -m64' --enable-dtrace DTRACEFLAGS='-64' ... + + Using Sun's compiler: + +./configure CC='/opt/SUNWspro/bin/cc -xtarget=native64' --enable-dtrace DTRACEFLAGS='-64' ... + + + + + + + + + + + + <filename>configure</filename> Environment Variables + + + configure environment variables + + + + In addition to the ordinary command-line options described above, + configure responds to a number of environment + variables. + You can specify environment variables on the + configure command line, for example: + +./configure CC=/opt/bin/gcc CFLAGS='-O2 -pipe' + + In this usage an environment variable is little different from a + command-line option. + You can also set such variables beforehand: + +export CC=/opt/bin/gcc +export CFLAGS='-O2 -pipe' +./configure + + This usage can be convenient because many programs' configuration + scripts respond to these variables in similar ways. + + + + The most commonly used of these environment variables are + CC and CFLAGS. + If you prefer a C compiler different from the one + configure picks, you can set the + variable CC to the program of your choice. + By default, configure will pick + gcc if available, else the platform's + default (usually cc). Similarly, you can override the + default compiler flags if needed with the CFLAGS variable. + + + + Here is a list of the significant variables that can be set in + this manner: + + + + BISON + + + Bison program + + + + + + CC + + + C compiler + + + + + + CFLAGS + + + options to pass to the C compiler + + + + + + CLANG + + + path to clang program used to process source code + for inlining when compiling with --with-llvm + + + + + + CPP + + + C preprocessor + + + + + + CPPFLAGS + + + options to pass to the C preprocessor + + + + + + CXX + + + C++ compiler + + + + + + CXXFLAGS + + + options to pass to the C++ compiler + + + + + + DTRACE + + + location of the dtrace program + + + + + + DTRACEFLAGS + + + options to pass to the dtrace program + + + + + + FLEX + + + Flex program + + + + + + LDFLAGS + + + options to use when linking either executables or shared libraries + + + + + + LDFLAGS_EX + + + additional options for linking executables only + + + + + + LDFLAGS_SL + + + additional options for linking shared libraries only + + + + + + LLVM_CONFIG + + + llvm-config program used to locate the + LLVM installation + + + + + + MSGFMT + + + msgfmt program for native language support + + + + + + PERL + + + Perl interpreter program. This will be used to determine the + dependencies for building PL/Perl. The default is + perl. + + + + + + PYTHON + + + Python interpreter program. 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 + + for more information. If this is not set, the following are probed + in this order: python python3 python2. + + + + + + TCLSH + + + Tcl interpreter program. This will be used to + determine the dependencies for building PL/Tcl. + If this is not set, the following are probed in this + order: tclsh tcl tclsh8.6 tclsh86 tclsh8.5 tclsh85 + tclsh8.4 tclsh84. + + + + + + XML2_CONFIG + + + xml2-config program used to locate the + libxml installation + + + + + + + + Sometimes it is useful to add compiler flags after-the-fact to the set + that were chosen by configure. An important example is + that gcc's option cannot be included + in the CFLAGS passed to configure, because + it will break many of configure's built-in tests. To add + such flags, include them in the COPT environment variable + while running make. The contents of COPT + are added to both the CFLAGS and LDFLAGS + options set up by configure. For example, you could do + +make COPT='-Werror' + + or + +export COPT='-Werror' +make + + + + + + If using GCC, it is best to build with an optimization level of + at least , because using no optimization + () 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 + . An easy way to do this is by passing an option + to make: make PROFILE=-O0 file.o. + + + + The COPT and PROFILE environment variables are + actually handled identically by the PostgreSQL + makefiles. Which to use is a matter of preference, but a common habit + among developers is to use PROFILE for one-time flag + adjustments, while COPT might be kept set all the time. + + + Post-Installation Setup - + Shared Libraries