mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-09 08:10:09 +08:00
Modify initdb to complain only when no usable system locales are found.
Per discussion, the original behavior seems too noisy. But if things are so broken that none of the locales reported by "locale -a" are usable, that's probably worth warning about.
This commit is contained in:
parent
fbc0d07796
commit
d4c810d570
@ -1564,7 +1564,7 @@ setup_collation(void)
|
||||
int i;
|
||||
FILE *locale_a_handle;
|
||||
char localebuf[NAMEDATALEN];
|
||||
int skipped = 0;
|
||||
int count = 0;
|
||||
PG_CMD_DECL;
|
||||
#endif
|
||||
|
||||
@ -1579,7 +1579,7 @@ setup_collation(void)
|
||||
|
||||
locale_a_handle = popen_check("locale -a", "r");
|
||||
if (!locale_a_handle)
|
||||
return;
|
||||
return; /* complaint already printed */
|
||||
|
||||
PG_CMD_OPEN;
|
||||
|
||||
@ -1597,12 +1597,11 @@ setup_collation(void)
|
||||
|
||||
len = strlen(localebuf);
|
||||
|
||||
if (localebuf[len - 1] != '\n')
|
||||
if (len == 0 || localebuf[len - 1] != '\n')
|
||||
{
|
||||
if (debug)
|
||||
fprintf(stderr, _("%s: locale name too long, skipped: %s\n"),
|
||||
progname, localebuf);
|
||||
skipped++;
|
||||
continue;
|
||||
}
|
||||
localebuf[len - 1] = '\0';
|
||||
@ -1628,22 +1627,23 @@ setup_collation(void)
|
||||
if (debug)
|
||||
fprintf(stderr, _("%s: locale name has non-ASCII characters, skipped: %s\n"),
|
||||
progname, localebuf);
|
||||
skipped++;
|
||||
continue;
|
||||
}
|
||||
|
||||
enc = pg_get_encoding_from_locale(localebuf, debug);
|
||||
if (enc < 0)
|
||||
{
|
||||
skipped++;
|
||||
continue; /* error message printed by pg_get_encoding_from_locale() */
|
||||
/* error message printed by pg_get_encoding_from_locale() */
|
||||
continue;
|
||||
}
|
||||
if (!PG_VALID_BE_ENCODING(enc))
|
||||
continue; /* ignore locales for client-only encodings */
|
||||
if (enc == PG_SQL_ASCII)
|
||||
continue; /* C/POSIX are already in the catalog */
|
||||
|
||||
PG_CMD_PRINTF2("INSERT INTO tmp_pg_collation (locale, encoding) VALUES ('%s', %d);",
|
||||
count++;
|
||||
|
||||
PG_CMD_PRINTF2("INSERT INTO tmp_pg_collation (locale, encoding) VALUES ('%s', %d);\n",
|
||||
escape_quotes(localebuf), enc);
|
||||
|
||||
/*
|
||||
@ -1653,12 +1653,12 @@ setup_collation(void)
|
||||
* "en_US" for LATIN1, say.
|
||||
*/
|
||||
if (normalize_locale_name(alias, localebuf))
|
||||
PG_CMD_PRINTF3("INSERT INTO tmp_pg_collation (collname, locale, encoding) VALUES ('%s', '%s', %d);",
|
||||
PG_CMD_PRINTF3("INSERT INTO tmp_pg_collation (collname, locale, encoding) VALUES ('%s', '%s', %d);\n",
|
||||
escape_quotes(alias), escape_quotes(localebuf), enc);
|
||||
}
|
||||
|
||||
/* Add an SQL-standard name */
|
||||
PG_CMD_PRINTF1("INSERT INTO tmp_pg_collation (collname, locale, encoding) VALUES ('ucs_basic', 'C', %d);", PG_UTF8);
|
||||
PG_CMD_PRINTF1("INSERT INTO tmp_pg_collation (collname, locale, encoding) VALUES ('ucs_basic', 'C', %d);\n", PG_UTF8);
|
||||
|
||||
/*
|
||||
* When copying collations to the final location, eliminate
|
||||
@ -1674,8 +1674,7 @@ setup_collation(void)
|
||||
" COALESCE(collname, locale) AS final_collname, "
|
||||
" (SELECT oid FROM pg_namespace WHERE nspname = 'pg_catalog') AS collnamespace, "
|
||||
" (SELECT relowner FROM pg_class WHERE relname = 'pg_collation') AS collowner, "
|
||||
" encoding, "
|
||||
" locale, locale "
|
||||
" encoding, locale, locale "
|
||||
" FROM tmp_pg_collation"
|
||||
" ORDER BY final_collname, collnamespace, encoding, (collname = locale) DESC, locale;\n");
|
||||
|
||||
@ -1683,12 +1682,9 @@ setup_collation(void)
|
||||
PG_CMD_CLOSE;
|
||||
|
||||
check_ok();
|
||||
if (skipped && !debug)
|
||||
if (count == 0 && !debug)
|
||||
{
|
||||
printf(ngettext("%d system locale has been omitted because it cannot supported by PostgreSQL.\n",
|
||||
"%d system locales have been omitted because they cannot be supported by PostgreSQL.\n",
|
||||
skipped),
|
||||
skipped);
|
||||
printf(_("No usable system locales were found.\n"));
|
||||
printf(_("Use the option \"--debug\" to see details.\n"));
|
||||
}
|
||||
#else /* not HAVE_LOCALE_T */
|
||||
|
Loading…
Reference in New Issue
Block a user