mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-06 15:24:56 +08:00
When creating a collation, check that the locales can be loaded
This is the same check that would happen later when the collation is used, but it's friendlier to check the collation already when it is created.
This commit is contained in:
parent
bd58d9d883
commit
4442e1975d
@ -15,6 +15,7 @@
|
||||
#include "postgres.h"
|
||||
|
||||
#include "access/heapam.h"
|
||||
#include "access/xact.h"
|
||||
#include "catalog/dependency.h"
|
||||
#include "catalog/indexing.h"
|
||||
#include "catalog/namespace.h"
|
||||
@ -30,6 +31,7 @@
|
||||
#include "utils/acl.h"
|
||||
#include "utils/builtins.h"
|
||||
#include "utils/lsyscache.h"
|
||||
#include "utils/pg_locale.h"
|
||||
#include "utils/syscache.h"
|
||||
|
||||
static void AlterCollationOwner_internal(Relation rel, Oid collationOid,
|
||||
@ -51,6 +53,7 @@ DefineCollation(List *names, List *parameters)
|
||||
DefElem *lcctypeEl = NULL;
|
||||
char *collcollate = NULL;
|
||||
char *collctype = NULL;
|
||||
Oid newoid;
|
||||
|
||||
collNamespace = QualifiedNameGetCreationNamespace(names, &collName);
|
||||
|
||||
@ -130,12 +133,16 @@ DefineCollation(List *names, List *parameters)
|
||||
|
||||
check_encoding_locale_matches(GetDatabaseEncoding(), collcollate, collctype);
|
||||
|
||||
CollationCreate(collName,
|
||||
newoid = CollationCreate(collName,
|
||||
collNamespace,
|
||||
GetUserId(),
|
||||
GetDatabaseEncoding(),
|
||||
collcollate,
|
||||
collctype);
|
||||
|
||||
/* check that the locales can be loaded */
|
||||
CommandCounterIncrement();
|
||||
pg_newlocale_from_collation(newoid);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -744,6 +744,8 @@ ERROR: encoding UTF8 does not match locale en_US
|
||||
DETAIL: The chosen LC_CTYPE setting requires encoding LATIN1.
|
||||
CREATE COLLATION test3 (lc_collate = 'en_US.utf8'); -- fail
|
||||
ERROR: parameter "lc_ctype" must be specified
|
||||
CREATE COLLATION testx (locale = 'nonsense'); -- fail
|
||||
ERROR: could not create locale "nonsense": No such file or directory
|
||||
CREATE COLLATION test4 FROM nonsense;
|
||||
ERROR: collation "nonsense" for current database encoding "UTF8" does not exist
|
||||
CREATE COLLATION test5 FROM test0;
|
||||
|
@ -234,6 +234,7 @@ CREATE COLLATION test0 (locale = 'en_US.utf8'); -- fail
|
||||
CREATE COLLATION test1 (lc_collate = 'en_US.utf8', lc_ctype = 'de_DE.utf8');
|
||||
CREATE COLLATION test2 (locale = 'en_US'); -- fail
|
||||
CREATE COLLATION test3 (lc_collate = 'en_US.utf8'); -- fail
|
||||
CREATE COLLATION testx (locale = 'nonsense'); -- fail
|
||||
|
||||
CREATE COLLATION test4 FROM nonsense;
|
||||
CREATE COLLATION test5 FROM test0;
|
||||
|
Loading…
Reference in New Issue
Block a user