CREATE COLLATION — définit une nouvelle collation
CREATE COLLATION [ IF NOT EXISTS ]nom
( [ LOCALE =locale
, ] [ LC_COLLATE =lc_collate
, ] [ LC_CTYPE =lc_ctype
, ] [ PROVIDER =provider
, ] [ DETERMINISTIC =boolean
, ] [ RULES =rules
, ] [ VERSION =version
] ) CREATE COLLATION [ IF NOT EXISTS ]nom
FROMcollation_existante
CREATE COLLATION
définit une nouvelle collation utilisant
la configuration de locale du système d'exploitation spécifiée
ou par copie d'une collation existante.
Pour pouvoir créer une collation, vous devez posséder
le privilège CREATE
sur le schéma de destination.
IF NOT EXISTS
Ne renvoie pas d'erreur si une collation du même nom existe déjà. Une note est affichée dans ce cas. Veuillez noter qu'il n'y a aucune garantie que la collation existante ait quelque rapport que ce soit avec la collation qui aurait été créée.
nom
Le nom de la collation. Le nom de la collation peut être qualifié par le schéma. Si ce n'est pas le cas, la collation est définie dans le schéma courant. Le nom de la collation doit être unique au sein de ce schéma. (Le catalogue système peut contenir des collations de même nom pour d'autres encodages, mais ces dernières sont ignorées si l'encodage de la base de données ne correspond pas).
locale
Le nom de la locale pour cette collation. Voir Section 23.2.2.3.1 et Section 23.2.2.3.2 pour les détails.
Si provider
vaut libc
, c'est
un raccourci pour configurer LC_COLLATE
et
LC_CTYPE
à la fois. Si vous indiquez
locale
, vous ne pouvez pas indiquer l'un de ces
deux paramètres.
Si provider
vaut builtin
,
alors locale
doit être précisé et configuré
soit à C
soit à C.UTF-8
.
lc_collate
Si provider
vaut libc
,
utilise la locale du systèm d'exploitation pour la catégorie
de locale LC_COLLATE
.
lc_ctype
Si provider
vaut libc
,
utilise la locale du systèm d'exploitation pour la catégorie
de locale LC_CTYPE
.
provider
Spécifie le fournisseur à utiliser pour les services de locale associés
à cette collation. Les valeurs possibles sont :
builtin
,
icu
(si le serveur a été compilé avec le support d'ICU) ou libc
.
libc
est la valeur par défaut. Voir Section 23.1.4 pour les détails.
DETERMINISTIC
Indique si la collation doit utiliser des comparaisons déterministes.
La valeur par défaut est vraie. Une comparaison déterministe considère
que les chaînes de caractères qui ne sont pas équivalentes à l'octet
près ne sont pas égales, même si la comparaison logique a pour
résultat qu'elles sont égales. PostgreSQL départage les égalités
en utilisant une comparaison à l'octet.
Une comparaison non déterministe peut faire que la collation est,
par exemple, insensible à la casse ou aux accents. Pour cela, vous
devez choisir une option LOCALE
appropriée
et indiquer ici que la collation est non déterministe.
Les collations non déterministes sont supportées uniquement par le fournisseur ICU.
rules
Indique des règles de collation supplémentaires pour personnaliser le comportement de la collation. Ceci est uniquement accepté par ICU. Voir Section 23.2.3.4 pour les détails.
version
Spécifie le texte de la version à stocker avec la collation.
Normalement, ce paramètre devrait être omis, ce qui fera que la version
sera calculée en fonction de la version courante de la collation telle
que fournie par le système d'exploitation. Cette option est prévue pour
être utilisée par pg_upgrade
pour copier la version
depuis une installation existante.
Voir aussi ALTER COLLATION pour savoir comment gérer les incompatibilités de version de collations.
collation_existante
Le nom d'une collation existante à copier. La nouvelle collation aura les mêmes propriétés que celle copiée, mais ce sera un objet indépendant.
CREATE COLLATION
acquiert un verrou SHARE ROW
EXCLUSIVE
, qui est exclusif avec lui-même, sur le catalogue
système pg_collation
, de sorte qu'une seule
commande CREATE COLLATION
peut s'exécuter à la fois.
Utilisez DROP COLLATION
pour supprimer une collation
définie par l'utilisateur.
Voir Section 23.2.2.3 pour plus d'informations sur la création de collations.
Lors de l'utilisation du fournisseur de collation libc
,
la locale doit être applicable à l'encodage actuel de la base de données.
Voir CREATE DATABASE pour les règles précises.
Créer une collation à partir de la locale système
fr_FR.utf8
(en supposant que l'encodage de la base courante est UTF8
):
CREATE COLLATION french (locale = 'fr_FR.utf8');
Pour créer une collation en utilisant le fournisseur ICU utilisant l'ordre de tri du carnet de téléphone allemand :
CREATE COLLATION german_phonebook (provider = icu, locale = 'de-u-co-phonebk');
Pour créer une collation en utilisant le fournisseur ICU, basé sur la locale ICU racine avec des règles personnalisées :
CREATE COLLATION custom (provider = icu, locale = 'und', rules = '&V << w <<< W');
Voir Section 23.2.3.4 pour plus de détails et d'exemples sur la syntaxe des règles.
Créer une collation à partir d'une collation existante :
CREATE COLLATION german FROM "de_DE";
Ceci peut être pratique pour pouvoir utiliser dans des applications des noms de collation indépendants du système d'exploitation.
Dans le standard SQL se trouve un ordre CREATE COLLATION
, mais
il est limité à la copie d'une collation existante. La syntaxe de création d'une
nouvelle collation est une extension
PostgreSQL.