From e2d11ef0b9567c65a870af4c4d026a4cde5145dc Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 9 May 2002 13:30:24 +0000 Subject: [PATCH] Make initdb print a message about which locale it is about to use. Re-add warning if the locale prevents LIKE-optimization. Done within initdb now. --- doc/src/sgml/runtime.sgml | 9 ++++----- src/backend/access/transam/xlog.c | 14 -------------- src/backend/utils/adt/selfuncs.c | 2 ++ src/bin/initdb/initdb.sh | 24 ++++++++++++++++++++++++ 4 files changed, 30 insertions(+), 19 deletions(-) diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml index 68b34b467f..163e58bece 100644 --- a/doc/src/sgml/runtime.sgml +++ b/doc/src/sgml/runtime.sgml @@ -145,11 +145,10 @@ postgres$ initdb -D /usr/local/pgsql/data linkend="locale">. One surprise you might encounter while running initdb is a notice similar to this: -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. This is intended to warn you that the currently selected locale will cause indexes to be sorted in an order that prevents them from diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 95889086af..545bd77907 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -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, diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index 710c37b2b8..9931aee8fe 100644 --- a/src/backend/utils/adt/selfuncs.c +++ b/src/backend/utils/adt/selfuncs.c @@ -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) diff --git a/src/bin/initdb/initdb.sh b/src/bin/initdb/initdb.sh index f3e303dc0a..5afdcd8163 100644 --- a/src/bin/initdb/initdb.sh +++ b/src/bin/initdb/initdb.sh @@ -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 -- 2.39.5