2 31.1. Running the Tests #
4 31.1.1. Running the Tests Against a Temporary Installation
5 31.1.2. Running the Tests Against an Existing Installation
6 31.1.3. Additional Test Suites
7 31.1.4. Locale and Encoding
8 31.1.5. Custom Server Settings
11 The regression tests can be run against an already installed and
12 running server, or using a temporary installation within the build
13 tree. Furthermore, there is a “parallel” and a “sequential” mode for
14 running the tests. The sequential method runs each test script alone,
15 while the parallel method starts up multiple server processes to run
16 groups of tests in parallel. Parallel testing adds confidence that
17 interprocess communication and locking are working correctly. Some
18 tests may run sequentially even in the “parallel” mode in case this is
21 31.1.1. Running the Tests Against a Temporary Installation #
23 To run the parallel regression tests after building but before
27 in the top-level directory. (Or you can change to src/test/regress and
28 run the command there.) Tests which are run in parallel are prefixed
29 with “+”, and tests which run sequentially are prefixed with “-”. At
30 the end you should see something like:
32 # All 213 tests passed.
35 or otherwise a note about which tests failed. See Section 31.2 below
36 before assuming that a “failure” represents a serious problem.
38 Because this test method runs a temporary server, it will not work if
39 you did the build as the root user, since the server will not start as
40 root. Recommended procedure is not to do the build as root, or else to
41 perform testing after completing the installation.
43 If you have configured PostgreSQL to install into a location where an
44 older PostgreSQL installation already exists, and you perform make
45 check before installing the new version, you might find that the tests
46 fail because the new programs try to use the already-installed shared
47 libraries. (Typical symptoms are complaints about undefined symbols.)
48 If you wish to run the tests before overwriting the old installation,
49 you'll need to build with configure --disable-rpath. It is not
50 recommended that you use this option for the final installation,
53 The parallel regression test starts quite a few processes under your
54 user ID. Presently, the maximum concurrency is twenty parallel test
55 scripts, which means forty processes: there's a server process and a
56 psql process for each test script. So if your system enforces a
57 per-user limit on the number of processes, make sure this limit is at
58 least fifty or so, else you might get random-seeming failures in the
59 parallel test. If you are not in a position to raise the limit, you can
60 cut down the degree of parallelism by setting the MAX_CONNECTIONS
61 parameter. For example:
62 make MAX_CONNECTIONS=10 check
64 runs no more than ten tests concurrently.
66 31.1.2. Running the Tests Against an Existing Installation #
68 To run the tests after installation (see Chapter 17), initialize a data
69 directory and start the server as explained in Chapter 18, then type:
72 or for a parallel test:
73 make installcheck-parallel
75 The tests will expect to contact the server at the local host and the
76 default port number, unless directed otherwise by PGHOST and PGPORT
77 environment variables. The tests will be run in a database named
78 regression; any existing database by this name will be dropped.
80 The tests will also transiently create some cluster-wide objects, such
81 as roles, tablespaces, and subscriptions. These objects will have names
82 beginning with regress_. Beware of using installcheck mode with an
83 installation that has any actual global objects named that way.
85 31.1.3. Additional Test Suites #
87 The make check and make installcheck commands run only the “core”
88 regression tests, which test built-in functionality of the PostgreSQL
89 server. The source distribution contains many additional test suites,
90 most of them having to do with add-on functionality such as optional
93 To run all test suites applicable to the modules that have been
94 selected to be built, including the core tests, type one of these
95 commands at the top of the build tree:
97 make installcheck-world
99 These commands run the tests using temporary servers or an
100 already-installed server, respectively, just as previously explained
101 for make check and make installcheck. Other considerations are the same
102 as previously explained for each method. Note that make check-world
103 builds a separate instance (temporary data directory) for each tested
104 module, so it requires more time and disk space than make
107 On a modern machine with multiple CPU cores and no tight
108 operating-system limits, you can make things go substantially faster
109 with parallelism. The recipe that most PostgreSQL developers actually
110 use for running all tests is something like
111 make check-world -j8 >/dev/null
113 with a -j limit near to or a bit more than the number of available
114 cores. Discarding stdout eliminates chatter that's not interesting when
115 you just want to verify success. (In case of failure, the stderr
116 messages are usually enough to determine where to look closer.)
118 Alternatively, you can run individual test suites by typing make check
119 or make installcheck in the appropriate subdirectory of the build tree.
120 Keep in mind that make installcheck assumes you've installed the
121 relevant module(s), not only the core server.
123 The additional tests that can be invoked this way include:
124 * Regression tests for optional procedural languages. These are
125 located under src/pl.
126 * Regression tests for contrib modules, located under contrib. Not
127 all contrib modules have tests.
128 * Regression tests for the interface libraries, located in
129 src/interfaces/libpq/test and src/interfaces/ecpg/test.
130 * Tests for core-supported authentication methods, located in
131 src/test/authentication. (See below for additional
132 authentication-related tests.)
133 * Tests stressing behavior of concurrent sessions, located in
135 * Tests for crash recovery and physical replication, located in
137 * Tests for logical replication, located in src/test/subscription.
138 * Tests of client programs, located under src/bin.
140 When using installcheck mode, these tests will create and destroy test
141 databases whose names include regression, for example pl_regression or
142 contrib_regression. Beware of using installcheck mode with an
143 installation that has any non-test databases named that way.
145 Some of these auxiliary test suites use the TAP infrastructure
146 explained in Section 31.4. The TAP-based tests are run only when
147 PostgreSQL was configured with the option --enable-tap-tests. This is
148 recommended for development, but can be omitted if there is no suitable
151 Some test suites are not run by default, either because they are not
152 secure to run on a multiuser system, because they require special
153 software or because they are resource intensive. You can decide which
154 test suites to run additionally by setting the make or environment
155 variable PG_TEST_EXTRA to a whitespace-separated list, for example:
156 make check-world PG_TEST_EXTRA='kerberos ldap ssl load_balance libpq_encryption'
158 The following values are currently supported:
161 Runs the test suite under src/test/kerberos. This requires an
162 MIT Kerberos installation and opens TCP/IP listen sockets.
165 Runs the test suite under src/test/ldap. This requires an
166 OpenLDAP installation and opens TCP/IP listen sockets.
170 src/interfaces/libpq/t/005_negotiate_encryption.pl. This opens
171 TCP/IP listen sockets. If PG_TEST_EXTRA also includes kerberos,
172 additional tests that require an MIT Kerberos installation are
176 Runs the test src/interfaces/libpq/t/004_load_balance_dns.pl.
177 This requires editing the system hosts file and opens TCP/IP
181 Runs the test suite under src/test/modules/oauth_validator. This
182 opens TCP/IP listen sockets for a test server running HTTPS.
185 Runs an additional test suite in
186 src/bin/pg_upgrade/t/002_pg_upgrade.pl which cycles the
187 regression database through pg_dump/ pg_restore. Not enabled by
188 default because it is resource intensive.
191 Runs the test suite under contrib/sepgsql. This requires an
192 SELinux environment that is set up in a specific way; see
196 Runs the test suite under src/test/ssl. This opens TCP/IP listen
199 wal_consistency_checking
200 Uses wal_consistency_checking=all while running certain tests
201 under src/test/recovery. Not enabled by default because it is
205 Runs the test suite under src/test/modules/xid_wraparound. Not
206 enabled by default because it is resource intensive.
208 Tests for features that are not supported by the current build
209 configuration are not run even if they are mentioned in PG_TEST_EXTRA.
211 In addition, there are tests in src/test/modules which will be run by
212 make check-world but not by make installcheck-world. This is because
213 they install non-production extensions or have other side-effects that
214 are considered undesirable for a production installation. You can use
215 make install and make installcheck in one of those subdirectories if
216 you wish, but it's not recommended to do so with a non-test server.
218 31.1.4. Locale and Encoding #
220 By default, tests using a temporary installation use the locale defined
221 in the current environment and the corresponding database encoding as
222 determined by initdb. It can be useful to test different locales by
223 setting the appropriate environment variables, for example:
225 make check LC_COLLATE=en_US.utf8 LC_CTYPE=fr_CA.utf8
227 For implementation reasons, setting LC_ALL does not work for this
228 purpose; all the other locale-related environment variables do work.
230 When testing against an existing installation, the locale is determined
231 by the existing database cluster and cannot be set separately for the
234 You can also choose the database encoding explicitly by setting the
235 variable ENCODING, for example:
236 make check LANG=C ENCODING=EUC_JP
238 Setting the database encoding this way typically only makes sense if
239 the locale is C; otherwise the encoding is chosen automatically from
240 the locale, and specifying an encoding that does not match the locale
241 will result in an error.
243 The database encoding can be set for tests against either a temporary
244 or an existing installation, though in the latter case it must be
245 compatible with the installation's locale.
247 31.1.5. Custom Server Settings #
249 There are several ways to use custom server settings when running a
250 test suite. This can be useful to enable additional logging, adjust
251 resource limits, or enable extra run-time checks such as
252 debug_discard_caches. But note that not all tests can be expected to
253 pass cleanly with arbitrary settings.
255 Extra options can be passed to the various initdb commands that are run
256 internally during test setup using the environment variable
257 PG_TEST_INITDB_EXTRA_OPTS. For example, to run a test with checksums
258 enabled and a custom WAL segment size and work_mem setting, use:
259 make check PG_TEST_INITDB_EXTRA_OPTS='-k --wal-segsize=4 -c work_mem=50MB'
261 For the core regression test suite and other tests driven by
262 pg_regress, custom run-time server settings can also be set in the
263 PGOPTIONS environment variable (for settings that allow this), for
265 make check PGOPTIONS="-c debug_parallel_query=regress -c work_mem=50MB"
267 (This makes use of functionality provided by libpq; see options for
270 When running against a temporary installation, custom settings can also
271 be set by supplying a pre-written postgresql.conf:
272 echo 'log_checkpoints = on' > test_postgresql.conf
273 echo 'work_mem = 50MB' >> test_postgresql.conf
274 make check EXTRA_REGRESS_OPTS="--temp-config=test_postgresql.conf"
276 31.1.6. Extra Tests #
278 The core regression test suite contains a few test files that are not
279 run by default, because they might be platform-dependent or take a very
280 long time to run. You can run these or other extra test files by
281 setting the variable EXTRA_TESTS. For example, to run the numeric_big
283 make check EXTRA_TESTS=numeric_big