Make initdb print a message about which locale it is about to use.
authorPeter Eisentraut <peter_e@gmx.net>
Thu, 9 May 2002 13:30:24 +0000 (13:30 +0000)
committerPeter Eisentraut <peter_e@gmx.net>
Thu, 9 May 2002 13:30:24 +0000 (13:30 +0000)
Re-add warning if the locale prevents LIKE-optimization.  Done within
initdb now.

doc/src/sgml/runtime.sgml
src/backend/access/transam/xlog.c
src/backend/utils/adt/selfuncs.c
src/bin/initdb/initdb.sh

index 68b34b467fc5e160cba316020a4e15f462cf025b..163e58bece8be1ade06482d800b840e5a441d9f8 100644 (file)
@@ -145,11 +145,10 @@ postgres$ <userinput>initdb -D /usr/local/pgsql/data</userinput>
    linkend="locale">.  One surprise you might encounter while running
    <command>initdb</command> is a notice similar to this:
 <screen>
-WARNING:  Initializing database with en_US collation order.
-        This locale setting will prevent use of index optimization for
-        LIKE and regexp searches.  If you are concerned about speed of
-        such queries, you may wish to set LC_COLLATE to "C" and
-        re-initdb.  For more information see the Administrator's Guide.
+The database cluster will be initialized with locale de_DE.
+This locale setting will prevent the use of indexes for pattern matching
+operations.  If that is a concern, rerun initdb with the collation order
+set to "C".  For more information see the Administrator's Guide.
 </screen>
    This is intended to warn you that the currently selected locale
    will cause indexes to be sorted in an order that prevents them from
index 95889086afba6d8632c14c32bc913cd540a6c188..545bd779072322d0adf0854ea7e076a8d93d46ee 100644 (file)
@@ -39,7 +39,6 @@
 #include "storage/spin.h"
 #include "utils/builtins.h"
 #include "utils/relcache.h"
-#include "utils/selfuncs.h"
 #include "miscadmin.h"
 
 
@@ -2108,19 +2107,6 @@ WriteControlFile(void)
                elog(PANIC, "invalid LC_CTYPE setting");
        StrNCpy(ControlFile->lc_ctype, localeptr, LOCALE_NAME_BUFLEN);
 
-       /*
-        * Issue warning WARNING if initdb'ing in a locale that will not permit
-        * LIKE index optimization.  This is not a clean place to do it, but I
-        * don't see a better place either...
-        */
-       if (!locale_is_like_safe())
-               elog(WARNING, "Initializing database with %s collation order."
-                        "\n\tThis locale setting will prevent use of index optimization for"
-                        "\n\tLIKE and regexp searches.  If you are concerned about speed of"
-                        "\n\tsuch queries, you may wish to set LC_COLLATE to \"C\" and"
-                        "\n\tre-initdb.  For more information see the Administrator's Guide.",
-                        ControlFile->lc_collate);
-
        /* Contents are protected with a CRC */
        INIT_CRC64(ControlFile->crc);
        COMP_CRC64(ControlFile->crc,
index 710c37b2b800bbd41f665e6a7454cc789c300598..9931aee8fe145c4f48dfa637b04fe9ebf9007182 100644 (file)
@@ -3189,6 +3189,8 @@ pattern_selectivity(char *patt, Pattern_Type ptype)
  * could be different from lc_collate_is_c(), but in a different
  * theory, non-C locales are completely unpredicable so it's unlikely
  * to happen.)
+ *
+ * Be sure to maintain the correspondence with the code in initdb.
  */
 bool
 locale_is_like_safe(void)
index f3e303dc0a82931b4b418bfec978ca6f7196a2bb..5afdcd81634744f85c0e60a6ff03fcffd084891c 100644 (file)
@@ -464,6 +464,30 @@ echo "The files belonging to this database system will be owned by user \"$Effec
 echo "This user must also own the server process."
 echo
 
+TAB='  '
+
+if test `pg_getlocale CTYPE` = `pg_getlocale COLLATE` \
+   && test `pg_getlocale CTYPE` = `pg_getlocale TIME` \
+   && test `pg_getlocale CTYPE` = `pg_getlocale NUMERIC` \
+   && test `pg_getlocale CTYPE` = `pg_getlocale MONETARY` \
+   && test `pg_getlocale CTYPE` = `pg_getlocale MESSAGES`
+then
+    echo "The database cluster will be initialized with locale `pg_getlocale CTYPE`."
+else
+    echo "The database cluster will be initialized with locales:"
+    echo "    COLLATE:  `pg_getlocale COLLATE`${TAB}CTYPE:   `pg_getlocale CTYPE`${TAB}MESSAGES: `pg_getlocale MESSAGES`"
+    echo "    MONETARY: `pg_getlocale MONETARY`${TAB}NUMERIC: `pg_getlocale NUMERIC`${TAB}TIME:     `pg_getlocale TIME`"
+fi
+
+# (Be sure to maintain the correspondence with locale_is_like_safe() in selfuncs.c.)
+if test `pg_getlocale COLLATE` != C && test `pg_getlocale COLLATE` != POSIX; then
+    echo "This locale setting will prevent the use of indexes for pattern matching"
+    echo "operations.  If that is a concern, rerun $CMDNAME with the collation order"
+    echo "set to \"C\".  For more information see the Administrator's Guide."
+fi
+echo
+
+
 ##########################################################################
 #
 # CREATE DATABASE DIRECTORY