]> granicus.if.org Git - postgresql/commitdiff
Only unset the locale environment when --no-locale is used (the way it was
authorPeter Eisentraut <peter_e@gmx.net>
Wed, 11 Feb 2009 14:03:42 +0000 (14:03 +0000)
committerPeter Eisentraut <peter_e@gmx.net>
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 0e082603bf192b7eb18828c0b4fdbd55ab881bc0..1cb90264fd461986360103ccf33ae9e13acac4a8 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/regress.sgml,v 1.60 2008/09/05 12:11:18 petere Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/regress.sgml,v 1.61 2009/02/11 14:03:41 petere Exp $ -->
 
  <chapter id="regress">
   <title id="regress-title">Regression Tests</title>
@@ -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 843d3c7294ff9d074197614e8fa48c073c4199e8..2ff76483d2e3f97f0841e831b1dd846acfa6febf 100644 (file)
@@ -11,7 +11,7 @@
  * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/test/regress/pg_regress.c,v 1.59 2009/01/28 15:32:21 mha Exp $
+ * $PostgreSQL: pgsql/src/test/regress/pg_regress.c,v 1.60 2009/02/11 14:03:42 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -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