aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/test/regress/README243
1 files changed, 243 insertions, 0 deletions
diff --git a/src/test/regress/README b/src/test/regress/README
new file mode 100644
index 00000000000..86311be8983
--- /dev/null
+++ b/src/test/regress/README
@@ -0,0 +1,243 @@
+Regression Tests
+
+Introduction
+
+The regression tests are a comprehensive set of tests for the SQL
+implementation in PostgreSQL. They test standard SQL operations as well as
+the extended capabilities of PostgreSQL. The test suite was originally
+developed by Jolly Chen and Andrew Yu, and was extensively revised and
+repackaged by Marc Fournier and Thomas Lockhart. From PostgreSQL 6.1 onward
+the regression tests are current for every official release.
+
+ ------------------------------------------------------------------------
+
+Running the Tests
+
+The regression test can be run against an already installed and running
+server, or using a temporary installation within the build tree.
+Furthermore, there is a "parallel" and a "sequential" mode for running the
+tests. The sequential method runs each test script in turn, whereas the
+parallel method starts up multiple server processes to run groups of tests
+in parallel. Parallel testing gives confidence that interprocess
+communication and locking are working correctly. For historical reasons, the
+sequential test is usually run against an existing installation and the
+parallel method against a temporary installation, but there are no technical
+reasons for this.
+
+To run the regression tests after building but before installation, type
+
+$ gmake check
+
+in the top-level directory. (Or you can change to src/test/regress and run
+the command there.) This will first build several auxiliary files, such as
+platform-dependent "expected" files and some sample user-defined trigger
+functions, and then run the test driver script. At the end you should see
+something like
+
+======================
+ All 77 tests passed.
+======================
+
+or otherwise a note about what tests failed. See the Section called Test
+Evaluation below for more.
+
+ Note: Because this test method runs a temporary server, it will
+ not work when you are the root user (the server will not start as
+ root). If you already did the build as root, you do not have to
+ start all over. Instead, make the regression test directory
+ writable by some other user, log in as that user, and restart the
+ tests. For example,
+
+ root# chmod -R a+w src/test/regress
+ root# chmod -R a+w contrib/spi
+ root# su - joeuser
+ joeuser$ cd <build top-level directory>
+ joeuser$ gmake check
+
+ (The only possible "security risk" here is that other users might
+ be able to alter the regression test results behind your back. Use
+ common sense when managing user permissions.)
+
+ Alternatively, run the tests after installation.
+
+ Tip: On some systems, the default Bourne-compatible shell
+ (/bin/sh) gets confused when it has to manage too many child
+ processes in parallel. This may cause the parallel test run to
+ lock up or fail. In such cases, specify a different
+ Bourne-compatible shell on the command line, for example:
+
+ $ gmake SHELL=/bin/ksh check
+
+To run the tests after installation, initialize a data area and start the
+server, then type
+
+$ gmake installcheck
+
+The tests will expect to contact the server at the local host and the
+default port number, unless directed otherwise by PGHOST and PGPORT
+environment variables.
+
+ ------------------------------------------------------------------------
+
+Test Evaluation
+
+Some properly installed and fully functional PostgreSQL installations can
+"fail" some of these regression tests due to platform-specific artifacts
+such as varying floating point representation and time zone support. The
+tests are currently evaluated using a simple diff comparison against the
+outputs generated on a reference system, so the results are sensitive to
+small system differences. When a test is reported as "failed", always
+examine the differences between expected and actual results; you may well
+find that the differences are not significant. Nonetheless, we still strive
+to maintain accurate reference files across all supported platforms, so it
+can be expected that all tests pass.
+
+The actual outputs of the regression tests are in files in the
+src/test/regress/results directory. The test script uses diff to compare
+each output file against the reference outputs stored in the
+src/test/regress/expected directory. Any differences are saved for your
+inspection in src/test/regress/regression.diffs. (Or you can run diff
+yourself, if you prefer.)
+
+ ------------------------------------------------------------------------
+
+Error message differences
+
+Some of the regression tests involve intentional invalid input values. Error
+messages can come from either the PostgreSQL code or from the host platform
+system routines. In the latter case, the messages may vary between
+platforms, but should reflect similar information. These differences in
+messages will result in a "failed" regression test that can be validated by
+inspection.
+
+ ------------------------------------------------------------------------
+
+Locale differences
+
+The tests expect to run in plain "C" locale. This should not cause any
+problems when you run the tests against a temporary installation, since the
+regression test driver takes care to start the server in C locale. However,
+if you run the tests against an already-installed server that is using non-C
+locale settings, you may see differences caused by varying rules for string
+sort order, formatting of numeric and monetary values, and so forth.
+
+In some locales the resulting differences are small and easily checked by
+inspection. However, in a locale that changes the rules for formatting of
+numeric values (typically by swapping the usage of commas and decimal
+points), entry of some data values will fail, resulting in extensive
+differences later in the tests where the missing data values are supposed to
+be used.
+
+ ------------------------------------------------------------------------
+
+Date and time differences
+
+Some of the queries in the timestamp test will fail if you run the test on
+the day of a daylight-savings time changeover, or the day before or after
+one. These queries assume that the intervals between midnight yesterday,
+midnight today and midnight tomorrow are exactly twenty-four hours -- which
+is wrong if daylight-savings time went into or out of effect meanwhile.
+
+Most of the date and time results are dependent on the time zone
+environment. The reference files are generated for time zone PST8PDT
+(Berkeley, California) and there will be apparent failures if the tests are
+not run with that time zone setting. The regression test driver sets
+environment variable PGTZ to PST8PDT, which normally ensures proper results.
+However, your system must provide library support for the PST8PDT time zone,
+or the time zone-dependent tests will fail. To verify that your machine does
+have this support, type the following:
+
+$ env TZ=PST8PDT date
+
+The command above should have returned the current system time in the
+PST8PDT time zone. If the PST8PDT database is not available, then your
+system may have returned the time in GMT. If the PST8PDT time zone is not
+available, you can set the time zone rules explicitly:
+
+PGTZ='PST8PDT7,M04.01.0,M10.05.03'; export PGTZ
+
+There appear to be some systems that do not accept the recommended syntax
+for explicitly setting the local time zone rules; you may need to use a
+different PGTZ setting on such machines.
+
+Some systems using older time zone libraries fail to apply daylight-savings
+corrections to dates before 1970, causing pre-1970 PDT times to be displayed
+in PST instead. This will result in localized differences in the test
+results.
+
+ ------------------------------------------------------------------------
+
+Floating point differences
+
+Some of the tests involve computing 64-bit (double precision) numbers from
+table columns. Differences in results involving mathematical functions of
+double precision columns have been observed. The float8 and geometry tests
+are particularly prone to small differences across platforms, or even with
+different compiler optimization options. Human eyeball comparison is needed
+to determine the real significance of these differences which are usually 10
+places to the right of the decimal point.
+
+Some systems signal errors from pow() and exp() differently from the
+mechanism expected by the current PostgreSQL code.
+
+ ------------------------------------------------------------------------
+
+Polygon differences
+
+Several of the tests involve operations on geographic data about the
+Oakland/Berkeley, California street map. The map data is expressed as
+polygons whose vertices are represented as pairs of double precision numbers
+(decimal latitude and longitude). Initially, some tables are created and
+loaded with geographic data, then some views are created that join two
+tables using the polygon intersection operator (##), then a select is done
+on the view.
+
+When comparing the results from different platforms, differences occur in
+the 2nd or 3rd place to the right of the decimal point. The SQL statements
+where these problems occur are the following:
+
+SELECT * from street;
+SELECT * from iexit;
+
+ ------------------------------------------------------------------------
+
+Row ordering differences
+
+You might see differences in which the same rows are output in a different
+order than what appears in the expected file. In most cases this is not,
+strictly speaking, a bug. Most of the regression test scripts are not so
+pedantic as to use an ORDER BY for every single SELECT, and so their result
+row orderings are not well-defined according to the letter of the SQL
+specification. In practice, since we are looking at the same queries being
+executed on the same data by the same software, we usually get the same
+result ordering on all platforms, and so the lack of ORDER BY isn't a
+problem. Some queries do exhibit cross-platform ordering differences,
+however. (Ordering differences can also be triggered by non-C locale
+settings.)
+
+Therefore, if you see an ordering difference, it's not something to worry
+about, unless the query does have an ORDER BY that your result is violating.
+But please report it anyway, so that we can add an ORDER BY to that
+particular query and thereby eliminate the bogus "failure" in future
+releases.
+
+You might wonder why we don't order all the regress test queries explicitly
+to get rid of this issue once and for all. The reason is that that would
+make the regression tests less useful, not more, since they'd tend to
+exercise query plan types that produce ordered results to the exclusion of
+those that don't.
+
+ ------------------------------------------------------------------------
+
+The "random" test
+
+There is at least one case in the "random" test script that is intended to
+produce random results. This causes random to fail the regression test once
+in a while (perhaps once in every five to ten trials). Typing
+
+diff results/random.out expected/random.out
+
+should produce only one or a few lines of differences. You need not worry
+unless the random test always fails in repeated attempts. (On the other
+hand, if the random test is never reported to fail even in many trials of
+the regression tests, you probably should worry.)