1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567 |
- PostgreSQL Installation from Source Code
- ------------------------------------------------------------------------
- This document describes the installation of PostgreSQL using this source
- code distribution.
- If you are building PostgreSQL for Microsoft Windows, read this document
- if you intend to build with MinGW or Cygwin; but if you intend to build
- with Microsoft's Visual C++, see the main documentation instead.
- ------------------------------------------------------------------------
- Short Version
- ./configure
- make
- su
- make 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/pg_ctl -D /usr/local/pgsql/data -l logfile start
- /usr/local/pgsql/bin/createdb test
- /usr/local/pgsql/bin/psql test
- The long version is the rest of this document.
- ------------------------------------------------------------------------
- Requirements
- In general, a modern Unix-compatible platform should be able to run
- PostgreSQL. The platforms that had received specific testing at the time
- of release are described in the section called "Supported Platforms"
- below.
- The following software packages are required for building PostgreSQL:
- - GNU make version 3.80 or newer is required; other make programs or
- older GNU make versions will *not* work. (GNU make is sometimes
- installed under the name "gmake".) To test for GNU make enter:
- make --version
- - You need an ISO/ANSI C compiler (at least C99-compliant). Recent
- versions of GCC are recommended, but PostgreSQL is known to build
- using a wide variety of compilers from different vendors.
- - tar is required to unpack the source distribution, in addition to
- either gzip or bzip2.
- - The GNU Readline library is used by default. It allows psql (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
- "--without-readline" option to "configure". As an alternative, you
- can often use the BSD-licensed "libedit" library, originally
- developed on NetBSD. The "libedit" library is GNU
- Readline-compatible and is used if "libreadline" is not found, or if
- "--with-libedit-preferred" is used as an option to "configure". If
- you are using a package-based Linux distribution, be aware that you
- need both the readline and readline-devel packages, if those are
- separate in your distribution.
- - The zlib compression library is used by default. If you don't want
- to use it then you must specify the "--without-zlib" option to
- "configure". Using this option disables support for compressed
- archives in pg_dump and pg_restore.
- 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:
- - To build the server programming language PL/Perl you need a full
- Perl installation, including the "libperl" library and the header
- files. The minimum required version is Perl 5.8.3. Since PL/Perl
- will be a shared library, the "libperl" library must be a shared
- library also on most platforms. This appears to be the default in
- recent Perl versions, but it was not in earlier versions, and in any
- case it is the choice of whomever installed Perl at your site.
- "configure" will fail if building PL/Perl is selected but it cannot
- find a shared "libperl". In that case, you will have to rebuild and
- install Perl manually to be able to build PL/Perl. During the
- configuration process for Perl, request a shared library.
- If you intend to make more than incidental use of PL/Perl, you
- should ensure that the Perl installation was built with the
- usemultiplicity option enabled (perl -V will show whether this is
- the case).
- - To build the PL/Python server programming language, you need a
- Python installation with the header files and the sysconfig module.
- The minimum required version is Python 2.7. Python 3 is supported if
- it's version 3.2 or later; but see the PL/Python documentation when
- using Python 3.
- Since PL/Python will be a shared library, the "libpython" library
- must be a shared library also on most platforms. This is not the
- case in a default Python installation built from source, but a
- shared library is available in many operating system distributions.
- "configure" will fail if building PL/Python is selected but it
- cannot find a shared "libpython". That might mean that you either
- have to install additional packages or rebuild (part of) your Python
- installation to provide this shared library. When building from
- source, run Python's configure with the --enable-shared flag.
- - To build the PL/Tcl procedural language, you of course need a Tcl
- installation. The minimum required version is Tcl 8.4.
- - To enable Native Language Support (NLS), that is, the ability to
- display a program's messages in a language other than English, you
- need an implementation of the Gettext API. Some operating systems
- have this built-in (e.g., Linux, NetBSD, Solaris), for other systems
- you can download an add-on package from
- https://www.gnu.org/software/gettext/. If you are using the Gettext
- implementation in the GNU C library then you will additionally need
- the GNU Gettext package for some utility programs. For any of the
- other implementations you will not need it.
- - You need OpenSSL, if you want to support encrypted client
- connections. OpenSSL is also required for random number generation
- on platforms that do not have "/dev/urandom" (except Windows). The
- minimum version required is 1.0.1.
- - You need Kerberos, OpenLDAP, and/or PAM, if you want to support
- authentication using those services.
- - You need LZ4, if you want to support compression of data with this
- method; see the configuration parameter default_toast_compression.
- - To build the PostgreSQL documentation, there is a separate set of
- requirements; see the main documentation's appendix on
- documentation.
- If you are building from a Git tree instead of using a released source
- package, or if you want to do server development, you also need the
- following packages:
- - Flex and 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 Flex 2.5.31 or later and Bison 1.875 or later.
- Other lex and yacc programs cannot be used.
- - Perl 5.8.3 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 Perl in any case. Perl
- is also required to run some test suites.
- If you need to get a GNU package, you can find it at your local GNU
- mirror site (see https://www.gnu.org/prep/ftp for a list) or at
- ftp://ftp.gnu.org/gnu/.
- Also check that you have sufficient disk space. You will need about 350
- MB for the source tree during compilation and about 60 MB for the
- installation directory. An empty database cluster takes about 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 300 MB. Use
- the "df" command to check free disk space.
- ------------------------------------------------------------------------
- Installation Procedure
- 1. Configuration
- 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 "configure" script. For a default
- installation simply enter:
- ./configure
- 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,
- and then build there, if you want to keep the build directory
- separate from the original source files. This procedure is called a
- VPATH build. Here's how:
- mkdir build_dir
- cd build_dir
- /path/to/source/tree/configure [options go here]
- make
- 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 "/usr/local/pgsql" by
- default.
- You can customize the build and installation process by supplying
- one 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 the section called "configure Options".
- Also, "configure" responds to certain environment variables, as
- described in the section called "configure Environment Variables".
- These provide additional ways to customize the configuration.
- 2. Build
- To start the build, type either of:
- make
- make all
- (Remember to use GNU make.) The build will take a few minutes
- depending on your hardware.
- If you want to build everything that can be built, including the
- documentation (HTML and man pages), and the additional modules
- ("contrib"), type instead:
- make world
- If you want to build everything that can be built, including the
- additional modules ("contrib"), but without the documentation, type
- instead:
- make world-bin
- If you want to invoke the build from another makefile rather than
- manually, you must unset MAKELEVEL or set it to zero, for instance
- like this:
- build-postgresql:
- $(MAKE) -C postgresql MAKELEVEL=0 all
- Failure to do that can lead to strange error messages, typically
- about missing header files.
- 3. Regression Tests
- 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 PostgreSQL runs on your machine in
- the way the developers expected it to. Type:
- make check
- (This won't work as root; do it as an unprivileged user.) See the
- file "src/test/regress/README" and the documentation for detailed
- information about interpreting the test results. You can repeat this
- test at any later time by issuing the same command.
- 4. Installing the Files
- Note:
- If you are upgrading an existing system be sure to read the
- documentation, which has instructions about upgrading a cluster.
- To install PostgreSQL enter:
- make install
- This will install files into the directories that were specified in
- Step 1. 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.
- To install the documentation (HTML and man pages), enter:
- make install-docs
- If you built the world above, type instead:
- make install-world
- This also installs the documentation.
- If you built the world without the documentation above, type
- instead:
- make install-world-bin
- You can use make install-strip instead of make install 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. install-strip 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.
- 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.
- Client-only installation: If you want to install only the client
- applications and interface libraries, then you can use these
- commands:
- make -C src/bin install
- make -C src/include install
- make -C src/interfaces install
- make -C doc install
- "src/bin" has a few binaries for server-only use, but they are
- small.
- Uninstallation: To undo the installation use the command "make
- uninstall". However, this will not remove any created directories.
- Cleaning: After the installation you can free disk space by removing
- the built files from the source tree with the command "make clean". This
- will preserve the files made by the "configure" program, so that you can
- rebuild everything with "make" later on. To reset the source tree to the
- state in which it was distributed, use "make 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.)
- If you perform a build and then discover that your "configure" options
- were wrong, or if you change anything that "configure" investigates (for
- example, software upgrades), then it's a good idea to do "make
- distclean" before reconfiguring and rebuilding. Without this, your
- changes in configuration choices might not propagate everywhere they
- need to.
- ------------------------------------------------------------------------
- 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
- "--prefix" 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.
- --prefix=PREFIX
- 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.
- --exec-prefix=EXEC-PREFIX
- 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.
- --bindir=DIRECTORY
- Specifies the directory for executable programs. The default is
- "EXEC-PREFIX/bin", which normally means "/usr/local/pgsql/bin".
- --sysconfdir=DIRECTORY
- Sets the directory for various configuration files, "PREFIX/etc" by
- default.
- --libdir=DIRECTORY
- Sets the location to install libraries and dynamically loadable
- modules. The default is "EXEC-PREFIX/lib".
- --includedir=DIRECTORY
- Sets the directory for installing C and C++ header files. The
- default is "PREFIX/include".
- --datarootdir=DIRECTORY
- 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".
- --datadir=DIRECTORY
- 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.
- --localedir=DIRECTORY
- Sets the directory for installing locale data, in particular message
- translation catalog files. The default is "DATAROOTDIR/locale".
- --mandir=DIRECTORY
- The man pages that come with PostgreSQL will be installed under this
- directory, in their respective "manx" subdirectories. The default is
- "DATAROOTDIR/man".
- --docdir=DIRECTORY
- 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".
- --htmldir=DIRECTORY
- The HTML-formatted documentation for PostgreSQL will be installed
- under this directory. The default is "DATAROOTDIR".
- Note:
- 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.
- ------------------------------------------------------------------------
- PostgreSQL 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 the section called "Requirements".
- --enable-nls[=LANGUAGES]
- 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.
- --with-perl
- Build the PL/Perl server-side language.
- --with-python
- Build the PL/Python server-side language.
- --with-tcl
- Build the PL/Tcl server-side language.
- --with-tclconfig=DIRECTORY
- 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".
- --with-icu
- Build with support for the ICU library, enabling use of ICU
- collation features. This requires the ICU4C package to be installed.
- The minimum required version of ICU4C is currently 4.2.
- By default, pkg-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=' '.)
- --with-llvm
- Build with support for LLVM based JIT compilation. This requires the
- LLVM library to be installed. The minimum required version of LLVM
- is currently 3.9.
- "llvm-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).
- --with-lz4
- Build with LZ4 compression support. This allows the use of LZ4 for
- compression of table data.
- --with-ssl=LIBRARY
- Build with support for SSL (encrypted) connections. The only
- "LIBRARY" supported is "openssl". 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.
- --with-openssl
- Obsolete equivalent of --with-ssl=openssl.
- --with-gssapi
- 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
- "--with-includes" and "--with-libraries" 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.
- --with-ldap
- Build with LDAP support for authentication and connection parameter
- lookup (see the documentation about client authentication and libpq
- 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.
- --with-pam
- Build with PAM (Pluggable Authentication Modules) support.
- --with-bsd-auth
- Build with BSD Authentication support. (The BSD Authentication
- framework is currently only available on OpenBSD.)
- --with-systemd
- Build with support for systemd service notifications. This improves
- integration if the server is started under systemd but has no impact
- otherwise. libsystemd and the associated header files need to be
- installed to use this option.
- --with-bonjour
- Build with support for Bonjour automatic service discovery. This
- requires Bonjour support in your operating system. Recommended on
- macOS.
- --with-uuid=LIBRARY
- Build the uuid-ossp module (which provides functions to generate
- UUIDs), using the specified UUID library. "LIBRARY" must be one of:
- - "bsd" to use the UUID functions found in FreeBSD, NetBSD, and
- some other BSD-derived systems
- - "e2fs" 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
- - "ossp" to use the OSSP UUID library
- --with-ossp-uuid
- Obsolete equivalent of --with-uuid=ossp.
- --with-libxml
- Build with libxml2, enabling SQL/XML support. Libxml2 version 2.6.23
- or later is required for this feature.
- To detect the required compiler and linker options, PostgreSQL will
- query "pkg-config", if that is installed and knows about libxml2.
- Otherwise the program "xml2-config", which is installed by libxml2,
- will be used if it is found. Use of "pkg-config" is preferred,
- because it can deal with multi-architecture installations better.
- To use a libxml2 installation that is in an unusual location, you
- can set "pkg-config"-related environment variables (see its
- documentation), or set the environment variable XML2_CONFIG to point
- to the "xml2-config" program belonging to the libxml2 installation,
- or set the variables XML2_CFLAGS and XML2_LIBS. (If "pkg-config" is
- installed, then to override its idea of where libxml2 is you must
- either set XML2_CONFIG or set both XML2_CFLAGS and XML2_LIBS to
- nonempty strings.)
- --with-libxslt
- Build with libxslt, enabling the xml2 module to perform XSL
- transformations of XML. "--with-libxml" 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.
- --without-readline
- Prevents use of the Readline library (and libedit as well). This
- option disables command-line editing and history in psql.
- --with-libedit-preferred
- 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.
- --without-zlib
- Prevents use of the Zlib library. This disables support for
- compressed archives in pg_dump and pg_restore.
- --disable-spinlocks
- 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-atomics
- 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-thread-safety
- 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
- --with-includes=DIRECTORIES
- "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 "--with-libraries" option.
- Example: --with-includes=/opt/gnu/include:/usr/sup/include.
- --with-libraries=DIRECTORIES
- "DIRECTORIES" is a colon-separated list of directories to search for
- libraries. You will probably have to use this option (and the
- corresponding "--with-includes" option) if you have packages
- installed in non-standard locations.
- Example: --with-libraries=/opt/gnu/lib:/usr/sup/lib.
- --with-system-tzdata=DIRECTORY
- 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.
- 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.
- --with-extra-version=STRING
- 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.
- --disable-rpath
- Do not mark PostgreSQL's executables to indicate that they should
- search for shared libraries in the installation's library directory
- (see "--libdir"). 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 the
- section called "Shared Libraries" for more detail.
- ------------------------------------------------------------------------
- Miscellaneous
- It's fairly common, particularly for test builds, to adjust the default
- port number with "--with-pgport". The other options in this section are
- recommended only for advanced users.
- --with-pgport=NUMBER
- 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.
- --with-krb-srvnam=NAME
- 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.
- --with-segsize=SEGSIZE
- 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.
- --with-blocksize=BLOCKSIZE
- 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.
- --with-wal-blocksize=BLOCKSIZE
- 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 "--enable-debug", which can be useful to enable detailed bug
- reports in the unlucky event that you encounter a bug. On platforms
- supporting DTrace, "--enable-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
- "--enable-debug" and "--enable-cassert".
- --enable-debug
- 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.
- --enable-cassert
- 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-tap-tests
- Enable tests using the Perl TAP tools. This requires a Perl
- installation and the Perl module IPC::Run.
- --enable-depend
- 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.
- --enable-coverage
- 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. This option is for
- use only with GCC and when doing development work.
- --enable-profiling
- 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.
- --enable-dtrace
- Compiles PostgreSQL with support for the dynamic tracing tool
- DTrace.
- 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' ...
- ------------------------------------------------------------------------
- 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 the
- PL/Python documentation 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 libxml2 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
- "-Werror" 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
- Note:
- If using GCC, it is best to build with an optimization level of at least
- "-O1", because using no optimization ("-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 "-O0". 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
- 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
- *not* necessary include FreeBSD, HP-UX, Linux, NetBSD, OpenBSD, and
- Solaris.
- The method to set the shared library search path varies between
- platforms, but the most widely-used method is to set the environment
- variable LD_LIBRARY_PATH like so: In Bourne shells ("sh", "ksh", "bash",
- "zsh"):
- LD_LIBRARY_PATH=/usr/local/pgsql/lib
- export LD_LIBRARY_PATH
- or in "csh" or "tcsh":
- setenv LD_LIBRARY_PATH /usr/local/pgsql/lib
- Replace /usr/local/pgsql/lib with whatever you set "--libdir" to in Step
- 1. You should put these commands into a shell start-up file such as
- "/etc/profile" or "~/.bash_profile". Some good information about the
- caveats associated with this method can be found at
- http://xahlee.info/UnixResource_dir/_/ldpath.html.
- On some systems it might be preferable to set the environment variable
- LD_RUN_PATH *before* building.
- On Cygwin, put the library directory in the PATH or move the ".dll"
- files into the "bin" directory.
- If in doubt, refer to the manual pages of your system (perhaps "ld.so"
- or "rld"). If you later get a message like:
- psql: error in loading shared libraries
- libpq.so.2.1: cannot open shared object file: No such file or directory
- then this step was necessary. Simply take care of it then.
- If you are on Linux and you have root access, you can run:
- /sbin/ldconfig /usr/local/pgsql/lib
- (or equivalent directory) after installation to enable the run-time
- linker to find the shared libraries faster. Refer to the manual page of
- "ldconfig" for more information. On FreeBSD, NetBSD, and OpenBSD the
- command is:
- /sbin/ldconfig -m /usr/local/pgsql/lib
- instead. Other systems are not known to have an equivalent command.
- ------------------------------------------------------------------------
- Environment Variables
- If you installed into "/usr/local/pgsql" or some other location that is
- not searched for programs by default, you should add
- "/usr/local/pgsql/bin" (or whatever you set "--bindir" to in Step 1)
- into your PATH. Strictly speaking, this is not necessary, but it will
- make the use of PostgreSQL much more convenient.
- To do this, add the following to your shell start-up file, such as
- "~/.bash_profile" (or "/etc/profile", if you want it to affect all
- users):
- PATH=/usr/local/pgsql/bin:$PATH
- export PATH
- If you are using "csh" or "tcsh", then use this command:
- set path = ( /usr/local/pgsql/bin $path )
- To enable your system to find the 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:
- MANPATH=/usr/local/pgsql/share/man:$MANPATH
- export MANPATH
- The environment variables PGHOST and 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 PGHOST. This is not required, however; the settings can be
- communicated via command line options to most client programs.
- ------------------------------------------------------------------------
- Getting Started
- The following is a quick summary of how to get PostgreSQL up and running
- once installed. The main documentation contains more information.
- 1. Create a user account for the PostgreSQL server. This is the user
- the server will run as. For production use you should create a
- separate, unprivileged account ("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.
- adduser postgres
- 2. Create a database installation with the "initdb" command. To run
- "initdb" you must be logged in to your PostgreSQL server account. It
- will not work as root.
- root# mkdir /usr/local/pgsql/data
- root# chown postgres /usr/local/pgsql/data
- root# su - postgres
- postgres$ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
- The "-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 "initdb", as illustrated here.
- 3. At this point, if you did not use the "initdb" -A option, you might
- want to modify "pg_hba.conf" to control local access to the server
- before you start it. The default is to trust all local users.
- 4. The previous "initdb" step should have told you how to start up the
- database server. Do so now. The command should look something like:
- /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data start
- To stop a server running in the background you can type:
- /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data stop
- 5. Create a database:
- /usr/local/pgsql/bin/createdb testdb
- Then enter:
- /usr/local/pgsql/bin/psql testdb
- to connect to that database. At the prompt you can enter SQL
- commands and start experimenting.
- ------------------------------------------------------------------------
- What Now?
- - The PostgreSQL distribution contains a comprehensive documentation
- set, which you should read sometime. After installation, the
- documentation can be accessed by pointing your browser to
- "/usr/local/pgsql/doc/html/index.html", unless you changed the
- installation directories.
- The first few chapters of the main documentation are the Tutorial,
- which should be your first reading if you are completely new to 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.
- - 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.
- - Run the regression tests against the installed server (using "make
- installcheck"). If you didn't run the tests before installation, you
- should definitely do it now. This is also explained in the
- documentation.
- - By default, 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
- shared_buffers and work_mem. Other parameters mentioned in the
- documentation also affect performance.
- ------------------------------------------------------------------------
- Supported Platforms
- A platform (that is, a CPU architecture and operating system
- combination) is considered supported by the 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 PostgreSQL Build Farm. If you are
- interested in using 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.
- In general, PostgreSQL can be expected to work on these CPU
- architectures: x86, x86_64, IA64, PowerPC, PowerPC 64, S/390, S/390x,
- Sparc, Sparc 64, ARM, MIPS, MIPSEL, and PA-RISC. Code support exists for
- M68K, M32R, 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 "--disable-spinlocks", but performance will be
- poor.
- PostgreSQL can be expected to work on these operating systems: Linux
- (all recent distributions), Windows (XP and later), FreeBSD, OpenBSD,
- NetBSD, macOS, AIX, HP/UX, and Solaris. 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 section called "Platform-Specific Notes" below to see if there is
- information specific to your operating system, particularly if using an
- older system.
- If you have installation problems on a platform that is known to be
- supported according to recent build farm results, please report it to
- <pgsql-bugs@lists.postgresql.org>. If you are interested in porting
- PostgreSQL to a new platform, <pgsql-hackers@lists.postgresql.org> is
- the appropriate place to discuss that.
- ------------------------------------------------------------------------
- Platform-Specific Notes
- This section documents additional platform-specific issues regarding the
- installation and setup of PostgreSQL. Be sure to read the installation
- instructions, and in particular the section called "Requirements" as
- well. Also, check the file "src/test/regress/README" and the
- documentation regarding the interpretation of regression test results.
- Platforms that are not covered here have no known platform-specific
- installation issues.
- ------------------------------------------------------------------------
- AIX
- PostgreSQL works on AIX, but AIX versions before about 6.1 have various
- issues and are not recommended. You can use GCC or the native IBM
- compiler "xlc".
- ------------------------------------------------------------------------
- Memory Management
- 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 loading of extensions failing with
- unusual errors. For example, running as the owner of the PostgreSQL
- installation:
- =# CREATE EXTENSION plperl;
- ERROR: could not load library "/opt/dbs/pgsql/lib/plperl.so": A memory address is not in the address space for the process.
- Running as a non-owner in the group possessing the PostgreSQL
- installation:
- =# CREATE EXTENSION plperl;
- ERROR: could not load library "/opt/dbs/pgsql/lib/plperl.so": Bad address
- Another example is out of memory errors in the PostgreSQL server logs,
- with every memory allocation near or greater than 256 MB failing.
- 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.
- In the case of the plperl 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.
- The "ideal" 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.
- If a 32-bit binary is desired, set LDR_CNTRL to MAXDATA=0xn0000000,
- where 1 <= n <= 8, before starting the PostgreSQL server, and try
- different values and "postgresql.conf" settings to find a configuration
- that works satisfactorily. This use of LDR_CNTRL tells AIX that you want
- the server to have MAXDATA bytes set aside for the heap, allocated in
- 256 MB segments. When you find a workable configuration, "ldedit" can be
- used to modify the binaries so that they default to using the desired
- heap size. PostgreSQL can also be rebuilt, passing
- configure LDFLAGS="-Wl,-bmaxdata:0xn0000000" to achieve the same
- effect.
- For a 64-bit build, set OBJECT_MODE to 64 and pass CC="gcc -maix64" and
- LDFLAGS="-Wl,-bbigtoc" to "configure". (Options for "xlc" might differ.)
- If you omit the export of OBJECT_MODE, your build may fail with linker
- errors. When OBJECT_MODE is set, it tells AIX's build utilities such as
- "ar", "as", and "ld" what type of objects to default to handling.
- 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.
- ------------------------------------------------------------------------
- Cygwin
- PostgreSQL can be built using Cygwin, a Linux-like environment for
- Windows, but that method is inferior to the native Windows build and
- running a server under Cygwin is no longer recommended.
- When building from source, proceed according to the Unix-style
- installation procedure (i.e., ./configure; make; etc.), noting the
- following Cygwin-specific differences:
- - Set your path to use the Cygwin bin directory before the Windows
- utilities. This will help prevent problems with compilation.
- - The "adduser" command is not supported; use the appropriate user
- management application on Windows NT, 2000, or XP. Otherwise, skip
- this step.
- - The "su" command is not supported; use ssh to simulate su on Windows
- NT, 2000, or XP. Otherwise, skip this step.
- - OpenSSL is not supported.
- - Start "cygserver" for shared memory support. To do this, enter the
- command /usr/sbin/cygserver &. This program needs to be
- running anytime you start the PostgreSQL server or initialize a
- database cluster ("initdb"). The default "cygserver" configuration
- may need to be changed (e.g., increase SEMMNS) to prevent PostgreSQL
- from failing due to a lack of system resources.
- - 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 "export
- LANG=C.utf8" before building, and then setting it back to the
- previous setting after you have installed PostgreSQL.
- - The parallel regression tests (make check) can generate spurious
- regression test failures due to overflowing the listen() backlog
- queue which causes connection refused errors or hangs. You can limit
- the number of connections using the make variable MAX_CONNECTIONS
- thus:
- make MAX_CONNECTIONS=5 check
- (On some systems you can have up to about 10 simultaneous
- connections.)
- It is possible to install "cygserver" and the PostgreSQL server as
- Windows NT services. For information on how to do this, please refer to
- the "README" document included with the PostgreSQL binary package on
- Cygwin. It is installed in the directory "/usr/share/doc/Cygwin".
- ------------------------------------------------------------------------
- macOS
- To build PostgreSQL from source on macOS, you will need to install
- Apple's command line developer tools, which can be done by issuing
- xcode-select --install
- (note that this will pop up a GUI dialog window for confirmation). You
- may or may not wish to also install Xcode.
- On recent macOS releases, it's necessary to embed the "sysroot" path in
- the include switches used to find some system header files. This results
- in the outputs of the configure script varying depending on which SDK
- version was used during configure. That shouldn't pose any problem in
- simple scenarios, but if you are trying to do something like building an
- extension on a different machine than the server code was built on, you
- may need to force use of a different sysroot path. To do that, set
- PG_SYSROOT, for example
- make PG_SYSROOT=/desired/path all
- To find out the appropriate path on your machine, run
- xcrun --show-sdk-path
- Note that building an extension using a different sysroot version than
- was used to build the core server is not really recommended; in the
- worst case it could result in hard-to-debug ABI inconsistencies.
- You can also select a non-default sysroot path when configuring, by
- specifying PG_SYSROOT to configure:
- ./configure ... PG_SYSROOT=/desired/path
- This would primarily be useful to cross-compile for some other macOS
- version. There is no guarantee that the resulting executables will run
- on the current host.
- To suppress the "-isysroot" options altogether, use
- ./configure ... PG_SYSROOT=none
- (any nonexistent pathname will work). This might be useful if you wish
- to build with a non-Apple compiler, but beware that that case is not
- tested or supported by the PostgreSQL developers.
- macOS's "System Integrity Protection" (SIP) feature breaks make check,
- because it prevents passing the needed setting of DYLD_LIBRARY_PATH down
- to the executables being tested. You can work around that by doing
- make install before make check. Most PostgreSQL developers just turn
- off SIP, though.
- ------------------------------------------------------------------------
- MinGW/Native Windows
- PostgreSQL for Windows can be built using MinGW, a Unix-like build
- environment for Microsoft operating systems, or using Microsoft's Visual
- C++ compiler suite. The MinGW build procedure uses the normal build
- system described in this chapter; the Visual C++ build works completely
- differently and is described in the documentation.
- 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 "configure", can be downloaded from http://www.mingw.org/.
- Neither is required to run the resulting binaries; they are needed only
- for creating the binaries.
- To build 64 bit binaries using MinGW, install the 64 bit tool set from
- https://mingw-w64.org/, put its bin directory in the PATH, and run
- "configure" with the "--host=x86_64-w64-mingw32" option.
- After you have everything installed, it is suggested that you run psql
- under "CMD.EXE", as the MSYS console has buffering issues.
- ------------------------------------------------------------------------
- Collecting Crash Dumps on Windows
- If PostgreSQL on Windows crashes, it has the ability to generate
- 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 Windows
- Debugger Tools or using Visual Studio. To enable the generation of dumps
- on Windows, create a subdirectory named "crashdumps" 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.
- ------------------------------------------------------------------------
- Solaris
- PostgreSQL is well-supported on Solaris. The more up to date your
- operating system, the fewer issues you will experience.
- ------------------------------------------------------------------------
- Required Tools
- 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. If you are using Sun's compiler, be careful not to select
- "/usr/ucb/cc"; use "/opt/SUNWspro/bin/cc".
- You can download Sun Studio from
- https://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/.
- Many GNU tools are integrated into Solaris 10, or they are present on
- the Solaris companion CD. If you need packages for older versions of
- Solaris, you can find these tools at http://www.sunfreeware.com. If you
- prefer sources, look at https://www.gnu.org/prep/ftp.
- ------------------------------------------------------------------------
- configure Complains About a Failed Test Program
- If "configure" 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 LDFLAGS environment variable on
- the "configure" command line, e.g.,
- configure ... LDFLAGS="-R /usr/sfw/lib:/opt/sfw/lib:/usr/local/lib"
- See the ld man page for more information.
- ------------------------------------------------------------------------
- Compiling for Optimal Performance
- On the SPARC architecture, Sun Studio is strongly recommended for
- compilation. Try using the "-xO5" optimization flag to generate
- significantly faster binaries. Do not use any flags that modify behavior
- of floating-point operations and errno processing (e.g., "-fast").
- 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. On the other hand, 32-bit code on the
- AMD64 CPU family is not native, so 32-bit code is significantly slower
- on that CPU family.
- ------------------------------------------------------------------------
- Using DTrace for Tracing PostgreSQL
- Yes, using DTrace is possible. See the documentation for further
- information.
- If you see the linking of the "postgres" executable abort with an error
- message like:
- 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
- make: *** [postgres] Error 1
- your DTrace installation is too old to handle probes in static
- functions. You need Solaris 10u4 or newer to use DTrace.
|