1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>17.1. Requirements</title><link rel="stylesheet" type="text/css" href="stylesheet.css" /><link rev="made" href="pgsql-docs@lists.postgresql.org" /><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><link rel="prev" href="installation.html" title="Chapter 17. Installation from Source Code" /><link rel="next" href="install-getsource.html" title="17.2. Getting the Source" /></head><body id="docContent" class="container-fluid col-10"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="5" align="center">17.1. Requirements</th></tr><tr><td width="10%" align="left"><a accesskey="p" href="installation.html" title="Chapter 17. Installation from Source Code">Prev</a> </td><td width="10%" align="left"><a accesskey="u" href="installation.html" title="Chapter 17. Installation from Source Code">Up</a></td><th width="60%" align="center">Chapter 17. Installation from Source Code</th><td width="10%" align="right"><a accesskey="h" href="index.html" title="PostgreSQL 18.0 Documentation">Home</a></td><td width="10%" align="right"> <a accesskey="n" href="install-getsource.html" title="17.2. Getting the Source">Next</a></td></tr></table><hr /></div><div class="sect1" id="INSTALL-REQUIREMENTS"><div class="titlepage"><div><div><h2 class="title" style="clear: both">17.1. Requirements <a href="#INSTALL-REQUIREMENTS" class="id_link">#</a></h2></div></div></div><p>
3 In general, a modern Unix-compatible platform should be able to run
4 <span class="productname">PostgreSQL</span>.
5 The platforms that had received specific testing at the
6 time of release are described in <a class="xref" href="supported-platforms.html" title="17.6. Supported Platforms">Section 17.6</a>
9 The following software packages are required for building
10 <span class="productname">PostgreSQL</span>:
12 </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
13 <a id="id-1.6.4.4.3.2.1.1.1" class="indexterm"></a>
15 <acronym class="acronym">GNU</acronym> <span class="application">make</span> version 3.81 or newer is required; other
16 <span class="application">make</span> programs or older <acronym class="acronym">GNU</acronym> <span class="application">make</span> versions will <span class="emphasis"><em>not</em></span> work.
17 (<acronym class="acronym">GNU</acronym> <span class="application">make</span> is sometimes installed under
18 the name <code class="filename">gmake</code>.) To test for <acronym class="acronym">GNU</acronym>
19 <span class="application">make</span> enter:
20 </p><pre class="screen">
21 <strong class="userinput"><code>make --version</code></strong>
23 </p></li><li class="listitem"><p>
24 <a id="id-1.6.4.4.3.2.2.1.1" class="indexterm"></a>
26 Alternatively, <span class="productname">PostgreSQL</span> can be built using
27 <a class="ulink" href="https://mesonbuild.com/" target="_top">Meson</a>. This is the only
28 option for building <span class="productname">PostgreSQL</span> on Windows
29 using <span class="productname">Visual Studio</span>. For other platforms,
30 using <span class="application">Meson</span> is currently experimental. If
31 you choose to use <span class="application">Meson</span>, then you don't need
32 <acronym class="acronym">GNU</acronym> <span class="application">make</span>, but the other
33 requirements below still apply.
35 The minimum required version of <span class="application">Meson</span> is 0.54.
36 </p></li><li class="listitem"><p>
37 You need an <acronym class="acronym">ISO</acronym>/<acronym class="acronym">ANSI</acronym> C compiler (at least
38 C99-compliant). Recent
39 versions of <span class="productname">GCC</span> are recommended, but
40 <span class="productname">PostgreSQL</span> is known to build using a wide variety
41 of compilers from different vendors.
42 </p></li><li class="listitem"><p>
43 <span class="application">tar</span> is required to unpack the source
44 distribution, in addition to either
45 <span class="application">gzip</span> or <span class="application">bzip2</span>.
46 </p></li><li class="listitem"><p>
47 <a id="id-1.6.4.4.3.2.5.1.1" class="indexterm"></a>
48 <a id="id-1.6.4.4.3.2.5.1.2" class="indexterm"></a>
49 <a id="id-1.6.4.4.3.2.5.1.3" class="indexterm"></a>
50 <a id="id-1.6.4.4.3.2.5.1.4" class="indexterm"></a>
52 <span class="application">Flex</span> and <span class="application">Bison</span> are
53 required. Other <span class="application">lex</span> and
54 <span class="application">yacc</span> programs cannot be used.
55 <span class="application">Bison</span> needs to be at least version 2.3.
56 </p></li><li class="listitem"><p>
57 <a id="id-1.6.4.4.3.2.6.1.1" class="indexterm"></a>
59 <span class="application">Perl</span> 5.14 or later is needed during the build
60 process and to run some test suites. (This requirement is separate from
61 the requirements for building <span class="application">PL/Perl</span>; see
63 </p></li><li class="listitem"><p>
64 <a id="id-1.6.4.4.3.2.7.1.1" class="indexterm"></a>
65 <a id="id-1.6.4.4.3.2.7.1.2" class="indexterm"></a>
67 The <acronym class="acronym">GNU</acronym> <span class="productname">Readline</span> library is used by
68 default. It allows <span class="application">psql</span> (the
69 PostgreSQL command line SQL interpreter) to remember each
70 command you type, and allows you to use arrow keys to recall and
71 edit previous commands. This is very helpful and is strongly
72 recommended. If you don't want to use it then you must specify
73 the <code class="option">--without-readline</code> option to
74 <code class="filename">configure</code>. As an alternative, you can often use the
75 BSD-licensed <code class="filename">libedit</code> library, originally
76 developed on <span class="productname">NetBSD</span>. The
77 <code class="filename">libedit</code> library is
78 GNU <span class="productname">Readline</span>-compatible and is used if
79 <code class="filename">libreadline</code> is not found, or if
80 <code class="option">--with-libedit-preferred</code> is used as an
81 option to <code class="filename">configure</code>. If you are using a package-based
82 Linux distribution, be aware that you need both the
83 <code class="literal">readline</code> and <code class="literal">readline-devel</code> packages, if
84 those are separate in your distribution.
85 </p></li><li class="listitem"><p>
86 <a id="id-1.6.4.4.3.2.8.1.1" class="indexterm"></a>
88 The <span class="productname">zlib</span> compression library is
89 used by default. If you don't want to use it then you must
90 specify the <code class="option">--without-zlib</code> option to
91 <code class="filename">configure</code>. Using this option disables
92 support for compressed archives in <span class="application">pg_dump</span> and
93 <span class="application">pg_restore</span>.
94 </p></li><li class="listitem"><p>
95 The ICU library is used by default. If you don't want to use it then you must specify the <code class="option">--without-icu</code> option to <code class="filename">configure</code>. Using this option disables support for ICU collation features (see <a class="xref" href="collation.html" title="23.2. Collation Support">Section 23.2</a>).
97 ICU support requires the <span class="productname">ICU4C</span> package to be
98 installed. The minimum required version of
99 <span class="productname">ICU4C</span> is currently 4.2.
102 <span class="productname">pkg-config</span><a id="id-1.6.4.4.3.2.9.3.2" class="indexterm"></a>
103 will be used to find the required compilation options. This is
104 supported for <span class="productname">ICU4C</span> version 4.6 and later.
105 For older versions, or if <span class="productname">pkg-config</span> is not
106 available, the variables <code class="envar">ICU_CFLAGS</code> and
107 <code class="envar">ICU_LIBS</code> can be specified to
108 <code class="filename">configure</code>, like in this example:
109 </p><pre class="programlisting">
110 ./configure ... ICU_CFLAGS='-I/some/where/include' ICU_LIBS='-L/some/where/lib -licui18n -licuuc -licudata'
112 (If <span class="productname">ICU4C</span> is in the default search path
113 for the compiler, then you still need to specify nonempty strings in
114 order to avoid use of <span class="productname">pkg-config</span>, for
115 example, <code class="literal">ICU_CFLAGS=' '</code>.)
116 </p></li></ul></div><p>
118 The following packages are optional. They are not required in the
119 default configuration, but they are needed when certain build
120 options are enabled, as explained below:
122 </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
123 To build the server programming language
124 <span class="application">PL/Perl</span> you need a full
125 <span class="productname">Perl</span> installation, including the
126 <code class="filename">libperl</code> library and the header files.
127 The minimum required version is <span class="productname">Perl</span> 5.14.
128 Since <span class="application">PL/Perl</span> will be a shared
129 library, the <a id="id-1.6.4.4.4.1.1.1.6" class="indexterm"></a>
130 <code class="filename">libperl</code> library must be a shared library
131 also on most platforms. This appears to be the default in
132 recent <span class="productname">Perl</span> versions, but it was not
133 in earlier versions, and in any case it is the choice of whomever
134 installed Perl at your site. <code class="filename">configure</code> will fail
135 if building <span class="application">PL/Perl</span> is selected but it cannot
136 find a shared <code class="filename">libperl</code>. In that case, you will have
137 to rebuild and install <span class="productname">Perl</span> manually to be
138 able to build <span class="application">PL/Perl</span>. During the
139 configuration process for <span class="productname">Perl</span>, request a
142 If you intend to make more than incidental use of
143 <span class="application">PL/Perl</span>, you should ensure that the
144 <span class="productname">Perl</span> installation was built with the
145 <code class="literal">usemultiplicity</code> option enabled (<code class="literal">perl -V</code>
146 will show whether this is the case).
147 </p></li><li class="listitem"><p>
148 To build the <span class="application">PL/Python</span> server programming
149 language, you need a <span class="productname">Python</span>
150 installation with the header files and
151 the <span class="application">sysconfig</span> module. The minimum
152 supported version is <span class="productname">Python</span> 3.6.8.
154 Since <span class="application">PL/Python</span> will be a shared
155 library, the <a id="id-1.6.4.4.4.1.2.2.2" class="indexterm"></a>
156 <code class="filename">libpython</code> library must be a shared library
157 also on most platforms. This is not the case in a default
158 <span class="productname">Python</span> installation built from source, but a
159 shared library is available in many operating system
160 distributions. <code class="filename">configure</code> will fail if
161 building <span class="application">PL/Python</span> is selected but it cannot
162 find a shared <code class="filename">libpython</code>. That might mean that you
163 either have to install additional packages or rebuild (part of) your
164 <span class="productname">Python</span> installation to provide this shared
165 library. When building from source, run <span class="productname">Python</span>'s
166 configure with the <code class="literal">--enable-shared</code> flag.
167 </p></li><li class="listitem"><p>
168 To build the <span class="application">PL/Tcl</span>
169 procedural language, you of course need a <span class="productname">Tcl</span>
170 installation. The minimum required version is
171 <span class="productname">Tcl</span> 8.4.
172 </p></li><li class="listitem"><p>
173 To enable Native Language Support (<acronym class="acronym">NLS</acronym>), that
174 is, the ability to display a program's messages in a language
175 other than English, you need an implementation of the
176 <span class="application">Gettext</span> <acronym class="acronym">API</acronym>. Some operating
177 systems have this built-in (e.g., <span class="systemitem">Linux</span>, <span class="systemitem">NetBSD</span>,
178 <span class="systemitem">Solaris</span>), for other systems you
179 can download an add-on package from <a class="ulink" href="https://www.gnu.org/software/gettext/" target="_top">https://www.gnu.org/software/gettext/</a>.
180 If you are using the <span class="application">Gettext</span> implementation in
181 the <acronym class="acronym">GNU</acronym> C library, then you will additionally
182 need the <span class="productname">GNU Gettext</span> package for some
183 utility programs. For any of the other implementations you will
185 </p></li><li class="listitem"><p>
186 You need <span class="productname">OpenSSL</span>, if you want to support
187 encrypted client connections. <span class="productname">OpenSSL</span> is
188 also required for random number generation on platforms that do not
189 have <code class="filename">/dev/urandom</code> (except Windows). The minimum
190 required version is 1.1.1.
192 Additionally, <span class="productname">LibreSSL</span> is supported using the
193 <span class="productname">OpenSSL</span> compatibility layer. The minimum
194 required version is 3.4 (from <span class="systemitem">OpenBSD</span>
196 </p></li><li class="listitem"><p>
197 You need <span class="application">MIT Kerberos</span> (for GSSAPI),
198 <span class="productname">OpenLDAP</span>, and/or <span class="application">PAM</span>,
199 if you want to support authentication using those services.
200 </p></li><li class="listitem"><p>
201 You need <span class="productname">Curl</span> to build an optional module
202 which implements the <a class="link" href="libpq-oauth.html" title="32.20. OAuth Support">OAuth Device
203 Authorization flow</a> for client applications.
204 </p></li><li class="listitem"><p>
205 You need <span class="productname">LZ4</span>, if you want to support
206 compression of data with that method; see
207 <a class="xref" href="runtime-config-client.html#GUC-DEFAULT-TOAST-COMPRESSION">default_toast_compression</a> and
208 <a class="xref" href="runtime-config-wal.html#GUC-WAL-COMPRESSION">wal_compression</a>.
209 </p></li><li class="listitem"><p>
210 You need <span class="productname">Zstandard</span>, if you want to support
211 compression of data with that method; see
212 <a class="xref" href="runtime-config-wal.html#GUC-WAL-COMPRESSION">wal_compression</a>.
213 The minimum required version is 1.4.0.
214 </p></li><li class="listitem"><p>
215 To build the <span class="productname">PostgreSQL</span> documentation,
216 there is a separate set of requirements; see
217 <a class="xref" href="docguide-toolsets.html" title="J.2. Tool Sets">Section J.2</a>.
218 </p></li></ul></div><p>
220 If you need to get a <acronym class="acronym">GNU</acronym> package, you can find
221 it at your local <acronym class="acronym">GNU</acronym> mirror site (see <a class="ulink" href="https://www.gnu.org/prep/ftp" target="_top">https://www.gnu.org/prep/ftp</a>
222 for a list) or at <a class="ulink" href="ftp://ftp.gnu.org/gnu/" target="_top">ftp://ftp.gnu.org/gnu/</a>.
223 </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="installation.html" title="Chapter 17. Installation from Source Code">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="installation.html" title="Chapter 17. Installation from Source Code">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="install-getsource.html" title="17.2. Getting the Source">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 17. Installation from Source Code </td><td width="20%" align="center"><a accesskey="h" href="index.html" title="PostgreSQL 18.0 Documentation">Home</a></td><td width="40%" align="right" valign="top"> 17.2. Getting the Source</td></tr></table></div></body></html>