Only unset the locale environment when --no-locale is used (the way it was
authorPeter Eisentraut <[email protected]>
Wed, 11 Feb 2009 14:03:42 +0000 (14:03 +0000)
committerPeter Eisentraut <[email protected]>
Wed, 11 Feb 2009 14:03:42 +0000 (14:03 +0000)
presumably designed, but didn't act).  This allows running the temp install
tests in a non-C locale, thus exercising users' real environments better.
Document how to change locales for test runs.

doc/src/sgml/regress.sgml
src/test/regress/pg_regress.c

index d1b7139ddfbf1817db8a9413cf963809d777db9b..3ca4cfa8e2650c1cb758b124033e9e9c4bea5fe9 100644 (file)
@@ -204,13 +204,43 @@ gmake installcheck
     <title>Locale differences</title>
 
     <para>
-     If you run the tests against an already-installed server that was
+     If you run the tests against a server that was
      initialized with a collation-order locale other than C, then
      there might be differences due to sort order and follow-up
      failures.  The regression test suite is set up to handle this
      problem by providing alternative result files that together are
      known to handle a large number of locales.
     </para>
+
+    <para>
+     To run the tests in a different locale when using the
+     temporary-installation method, pass the appropriate
+     locale-related environment variables on
+     the <command>make</command> command line, for example:
+<programlisting>
+gmake check LC_ALL=de_DE.utf8
+</programlisting>
+     or analogously to use no locale:
+<programlisting>
+gmake check LC_ALL=C
+</programlisting>
+     When running the tests against an existing installation, the
+     locale setup is determined by the existing installation.  To
+     change it, initialize the database cluster with a different
+     locale by passing the appropriate options
+     to <command>initdb</command>.
+    </para>
+
+    <para>
+     In general, it is nevertheless advisable to try to run the
+     regression tests in the locale setup that is wanted for
+     production use, as this will exercise the locale- and
+     encoding-related code portions that will actually be used in
+     production.  Depending on the operating system environment, you
+     might get failures, but then you will at least know what
+     locale-specific behaviors to expect when running real
+     applications.
+    </para>
    </sect2>
     
    <sect2>
index c31a2b7380f64fe9fb224e22b776528143b031da..944596509bf5fb73e8477af7ee1c5c84e264b544 100644 (file)
@@ -686,22 +686,25 @@ initialize_environment(void)
 {
        char       *tmp;
 
-       /*
-        * Clear out any non-C locale settings
-        */
-       unsetenv("LC_COLLATE");
-       unsetenv("LC_CTYPE");
-       unsetenv("LC_MONETARY");
-       unsetenv("LC_MESSAGES");
-       unsetenv("LC_NUMERIC");
-       unsetenv("LC_TIME");
-       unsetenv("LC_ALL");
-       unsetenv("LANG");
-       unsetenv("LANGUAGE");
-       /* On Windows the default locale cannot be English, so force it */
+       if (nolocale)
+       {
+               /*
+                * Clear out any non-C locale settings
+                */
+               unsetenv("LC_COLLATE");
+               unsetenv("LC_CTYPE");
+               unsetenv("LC_MONETARY");
+               unsetenv("LC_MESSAGES");
+               unsetenv("LC_NUMERIC");
+               unsetenv("LC_TIME");
+               unsetenv("LC_ALL");
+               unsetenv("LANG");
+               unsetenv("LANGUAGE");
+               /* On Windows the default locale cannot be English, so force it */
 #if defined(WIN32) || defined(__CYGWIN__)
-       putenv("LANG=en");
+               putenv("LANG=en");
 #endif
+       }
 
        /*
         * Set multibyte as requested