README
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:9k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. Introduction
  2.   The PostgreSQL regression tests are a comprehensive set of tests for the
  3.   SQL implementation embedded in PostgreSQL developed by Jolly Chen and
  4.   Andrew Yu. It tests standard SQL operations as well as the extensibility
  5.   capabilities of PostgreSQL.
  6.   These tests have recently been revised by Marc Fournier and Thomas Lockhart
  7.   to become current for PostgreSQL v6.1. The tests are now packaged as
  8.   functional units and should be easier to run and easier to interpret.
  9.   Some properly installed and fully functional PostgreSQL installations
  10.   can fail some of these regression tests due to artifacts of floating point
  11.   representation and time zone support. The current tests are evaluated
  12.   using a simple "diff" algorithm, and are sensitive to small system
  13.   differences. For apparently failed tests, examining the differences
  14.   may reveal that the differences are not significant.
  15. Preparation
  16.   The regression test is invoked by the 'make' command which compiles
  17.   a 'c' program with PostgreSQL extension functions into a shared library
  18.   in the current directory.  Localized shell scripts are also created in
  19.   the current directory. The output file templates are massaged into the
  20.   ./expected/*.out files.  The localization replaces macros in the source
  21.   files with absolute pathnames and user names.
  22.   It was formerly necessary to run the postmaster with system time zone
  23.   set to PST, but this is no longer required.  You can run the regression
  24.   tests under your normal postmaster configuration.  The test script will
  25.   set the PGTZ environment variable to ensure that timezone-dependent tests
  26.   produce the expected results.
  27. Directory Layout
  28.   input/ .... .source files that are converted using 'make all' into
  29.               some of the .sql files in the 'sql' subdirectory
  30.   output/ ... .source files that are converted using 'make all' into
  31.               .out files in the 'expected' subdirectory
  32.   sql/ ...... .sql files used to perform the regression tests
  33.   expected/ . .out files that represent what we *expect* the results to
  34.               look like
  35.   results/ .. .out files that represent what the results *actually* look
  36.               like. Also used as temporary storage for table copy testing.
  37. Running the regression test
  38.   If you have prevously invoked the regression test, clean up the
  39.   working directory with:
  40.         make clean
  41.   The regression test is invoked with the command:
  42.         make all runtest
  43.   Normally, the regression test should be run as the pg_superuser since
  44.   the 'src/test/regress' directory and sub-directories are owned by the
  45.   pg_superuser. If you run the regression test as another user the
  46.   'src/test/regress' directory tree should be writeable to that user.
  47. Comparing expected/actual output
  48.   The results are in files in the ./results directory. These results
  49.   can be compared with results in the ./expected directory using 'diff'.
  50.   (The test script now does this for you, and leaves the differences
  51.   in ./regression.diffs.)
  52.   The files might not compare exactly. The following paragraphs attempt
  53.   to explain the differences.
  54. Error message differences
  55.   Some of the regression tests involve intentional invalid input values.
  56.   Error messages can come from either the Postgres code or from the host
  57.   platform system routines. In the latter case, the messages may vary
  58.   between platforms, but should reflect similar information. These
  59.   differences in messages will result in a "failed" regression test which
  60.   can be validated by inspection.
  61. OID differences
  62.   There are several places where PostgreSQL OID (object identifiers) appear
  63.   in 'regress.out'. OID's are unique 32-bit integers which are generated
  64.   by the PostgreSQL backend whenever a table row is inserted or updated.
  65.   If you run the regression test on a non-virgin database or run it multiple
  66.   times, the OID's reported will have different values. 
  67.   The following SQL statements in 'misc.out' have shown this behavior:
  68.   QUERY: SELECT user_relns() AS user_relns ORDER BY user_relns;
  69.     The 'a,523676' row is composed from an OID.
  70. DATE/TIME differences
  71.   Most of the date and time results are dependent on timezone environment.
  72.   The reference files are generated for timezone PST8PDT (Berkeley,
  73.   California) and there will be apparent failures if the tests are not
  74.   run with that timezone setting.  The regression test driver sets
  75.   environment variable PGTZ to PST8PDT to ensure proper results.
  76.   There appear to be some systems which do not accept the recommended syntax
  77.   for explicitly setting the local time zone rules; you may need to use
  78.   a different PGTZ setting on such machines.
  79.   Some systems using older timezone libraries fail to apply daylight-savings
  80.   corrections to pre-1970 dates, causing pre-1970 PDT times to be displayed
  81.   in PST instead.  This will result in localized differences in the test
  82.   results.
  83. FLOATING POINT differences
  84.   Some of the tests involve computing 64-bit (FLOAT8) numbers from table
  85.   columns. Differences in results involving mathematical functions of
  86.   FLOAT8 columns have been observed. These differences occur where
  87.   different operating systems are used on the same platform ie:
  88.   BSDI and SOLARIS on Intel/86, and where the same operating system is
  89.   used used on different platforms, ie: SOLARIS on SPARC and Intel/86.
  90.   Human eyeball comparison is needed to determine the real significance
  91.   of these differences which are usually 10 places to the right of
  92.   the decimal point.
  93.   Some systems signal errors from pow() and exp() differently from
  94.   the mechanism expected by the current Postgres code.
  95. POLYGON differences
  96.   Several of the tests involve operations on geographic data about the
  97.   Oakland/Berkley CA street map. The map data is expressed as polygons
  98.   whose vertices are represented as pairs of FLOAT8 numbers (decimal
  99.   latitude and longitude). Initially, some tables are created and
  100.   loaded with geographic data, then some views are created which join
  101.   two tables using the polygon intersection operator (##), then a select
  102.   is done on the view. 
  103.   When comparing the results from different platforms, differences occur
  104.   in the 2nd or 3rd place to the right of the decimal point. The SQL
  105.   statements where these problems occur are the following:
  106.     QUERY: SELECT * from street;
  107.     QUERY: SELECT * from iexit;
  108. Random differences
  109.   There is at least one test case in random.out which is intended to produce
  110.   random results. This causes random to fail the regression testing.
  111.   Typing "diff results/random.out expected/random.out" should produce only
  112.   one or a few lines of differences for this reason, but other floating
  113.   point differences on dissimilar architectures might cause many more
  114.   differences. See the release notes below.
  115. The 'expected' files
  116.   The ./expected/*.out files were adapted from the original monolithic
  117.   'expected.input' file provided by Jolly Chen et al. Newer versions of these
  118.   files generated on various development machines have been substituted after
  119.   careful (?) inspection. Many of the development machines are running a
  120.   Unix OS variant (FreeBSD, Linux, etc) on Ix86 hardware.
  121. Current release notes (Thomas.Lockhart@jpl.nasa.gov)
  122.   The regression tests have been adapted and extensively modified for the
  123.   v6.1 release of PostgreSQL.
  124.   Three new data types (datetime, timespan, and circle) have been added to
  125.   the native set of PostgreSQL types. Points, boxes, paths, and polygons
  126.   have had their output formats made consistant across the data types.
  127.   The polygon output in misc.out has only been spot-checked for correctness
  128.   relative to the original regression output.
  129.   PostgreSQL v6.1 introduces a new, alternate optimizer which uses "genetic"
  130.   algorithms. These algorithms introduce a random behavior in the ordering
  131.   of query results when the query contains multiple qualifiers or multiple
  132.   tables (giving the optimizer a choice on order of evaluation). Several
  133.   regression tests have been modified to explicitly order the results, and
  134.   hence are insensitive to optimizer choices. A few regression tests are
  135.   for data types which are inherently unordered (e.g. points and time
  136.   intervals) and tests involving those types are explicitly bracketed with
  137.   "set geqo to 'off'" and "reset geqo".
  138.   The interpretation of array specifiers (the curly braces around atomic
  139.   values) appears to have changed sometime after the original regression
  140.   tests were generated. The current ./expected/*.out files reflect this
  141.   new interpretation, which may not be correct!
  142.   The float8 regression test fails on at least some platforms. This is due
  143.   to differences in implementations of pow() and exp() and the signaling
  144.   mechanisms used for overflow and underflow conditions.
  145.   The "random" results in the random test should cause the "random" test
  146.   to be "failed", since the regression tests are evaluated using a simple
  147.   diff. However, "random" does not seem to produce random results on my 
  148.   test machine (Linux/gcc/i686).
  149. Sample timing results
  150.   Timing under Linux 2.0.27 seems to have a roughly 5% variation from run
  151.   to run, presumably due to the timing vagaries of multitasking systems.
  152.   Time   System
  153.   06:12  Pentium Pro 180, 32MB, Linux 2.0.30, gcc 2.7.2 -O2 -m486
  154.   12:06  P-100, 48MB, Linux 2.0.29, gcc
  155.   39:58  Sparc IPC 32MB, Solaris 2.5, gcc 2.7.2.1 -O -g