ALTER COLLATION — modifie la définition d'une collation
ALTER COLLATIONname
REFRESH VERSION ALTER COLLATIONnom
RENAME TOnouveau_nom
ALTER COLLATIONnom
OWNER TO {nouveau_propriétaire
| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER COLLATIONnom
SET SCHEMAnouveau_schéma
ALTER COLLATION
modifie la définition d'une
collation.
Vous devez être propriétaire de la collation pour utiliser ALTER COLLATION
.
Pour en modifier le propriétaire, vous devez également être un membre direct ou indirect du nouveau
rôle propriétaire, et ce rôle doit détenir le privilège CREATE
sur le schéma de la collation. (Ces restrictions garantissent que, en modifiant le
propriétaire, vous ne pouvez rien faire qui ne soit impossible en supprimant et en recréant la collation.
De toute manière, un super-utilisateur peut modifier le propriétaire de n'importe
quelle collation.)
nom
Le nom (éventuellement précédé par le schéma) d'une collation existante.
nouveau_nom
Le nouveau nom de la collation.
nouveau_propriétaire
Le nouveau propriétaire de la collation.
nouveau_schéma
Le nouveau schéma de la collation.
REFRESH VERSION
Met à jour la version de la collation. Voir Notes ci-dessous.
Avec les collations de la bibliothèque ICU, la version du collator spécifique à ICU est enregistrée dans le catalogue système lors de la création de l'objet collation. Quand la collation est utilisée, la version courante est comparée à la version enregistrée, et un avertissement est émis en cas d'incompatibilité, par exemple :
WARNING: collation "xx-x-icu" has version mismatch DETAIL: The collation in the database was created using version 1.2.3.4, but the operating system provides version 2.3.4.5. HINT: Rebuild all objects affected by this collation and run ALTER COLLATION pg_catalog."xx-x-icu" REFRESH VERSION, or build PostgreSQL with the right library version.
Un changement dans des définitions de collations peut entraîner des corruptions
d'index et d'autres problèmes, car le moteur de la base de données
s'appuie sur le fait que les objets stockées ont un certain ordre. En
général, cela devrait être évité, mais peut arriver dans certaines
circonstances légitimes, comme l'utilisation de
pg_upgrade
pour mettre à jour vers des binaires du serveur
liés à une version plus récente d'ICU. Dans ces circonstances, tous les objets
dépendants de cette collation doivent être reconstruits, par exemple
avec REINDEX
. Cette opération terminée, la
version de la collation peut être rafraîchie avec la commande
ALTER COLLATION ... REFRESH VERSION
. Elle mettra à jour
le catalogue système avec la version courante du collator et
l'avertissement ne s'affichera plus. Notez que la commande ne
vérifie pas que tous les objets affectés ont été reconstruits
correctement.
Avec les collations fournies par la libc
,
l'information sur la version est enregistrée sur les systèmes utilisant la
bibliothèque C GNU (soit la plupart des systèmes sous Linux), sur FreeBSD,
et Windows.
Si les collations utilisent la bibliothèque C GNU, la version de la bibliothèque C est utilisée comme proxy pour la version de la collation. Beaucoup de distributions Linux ne changent les définitions de collation que lors des mises à jour de la bibliothèque C. Cette approche pose problème, car les mainteneurs sont libres de rétroporter des définitions de collation récentes vers des versions anciennes de la bibliothèque C.
Si les collations utilisent celles de Windows, l'information de version
n'est disponible que pour celles définies avec des étiquettes d'identification de langue
BCP 47, par exemple en-US
.
Actuellement, il n'y a pas de traçage de version pour la collation par défaut de la base.
La requête suivante peut être utilisée pour identifier toutes les collations de la base de données courante qui nécessitent d'être rafraîchies, ainsi que tous les objets qui en dépendent :
SELECT pg_describe_object(refclassid, refobjid, refobjsubid) AS "Collation", pg_describe_object(classid, objid, objsubid) AS "Object" FROM pg_depend d JOIN pg_collation c ON refclassid = 'pg_collation'::regclass AND refobjid = c.oid WHERE c.collversion <> pg_collation_actual_version(c.oid) ORDER BY 1, 2;
Pour renommer la collation de_DE
en
german
:
ALTER COLLATION "de_DE" RENAME TO german;
Pour donner la propriété de la collation en_US
à
joe
:
ALTER COLLATION "en_US" OWNER TO joe;
Il n'y a pas de commande ALTER COLLATION
dans
le standard SQL.