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_USER | SESSION_USER } ALTER COLLATIONnom
SET SCHEMAnouveau_schéma
ALTER COLLATION
modifie la définition d'une
collation.
Pour pouvoir utiliser la commande ALTER COLLATION
, vous devez être propriétaire de la 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 ont pour effet que vous ne pouvez effectuer aucune modification
de propriétaire qui serait impossible en supprimant et en recréant la collation.
Cependant, un super-utilisateur peut modifier le propriétaire de n'importe
quelle collation, quoi qu'il arrive.)
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.
Lorsque les collations fournies par la bibliothèque ICU, la version du collator spécifique à ICU est enregistrée dans le catalogue système au moment de la création de l'objet collation. Quand la collation est utilisée, la version courante est vérifiée par rapport à 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 les définitions de collations peut mener à corrompre les
index ainsi que d'autres problèmes où le moteur de la base de données
s'appuie sur le fait que les objets stockées aient un certain ordre. En
général, cela devrait être évité, mais cela peut arriver dans certaines
circonstances légitimes, comme lors de l'utilisation de
pg_upgrade
pour mettre à jour vers des binaires serveur
liés à une version plus récente d'ICU. Quand cela arrive, tous les objets
dépendant de cette collation devraient être reconstruits, par exemple, en
utilisant REINDEX
. Quand l'opération est terminée, la
version de la collation peut être rafraichie en utilisant la commande
ALTER COLLATION ... REFRESH VERSION
. Cela mettra à jour
le catalogue système pour enregistrer la version courante du collator et
fera que l'avertissement ne sera plus affiché. Veuillez noter que cela ne
vérifie absolument pas si tous les objets affectés ont été reconstruits
correctement.
Lors de l'utilisation de collations fournies par la bibliothèque
libc
et que PostgreSQL a été
construit avec la bibliothèque GNU C, la version de la bibliothèque C est
utilisée comme version de collation. Comme les définitions des collations
changent typiquement seulement avec les versions de la bibliothèque GNU,
cela offre quelques défenses contre la corruption, même si ce n'est pas
totalement fiable.
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 dans la base de données courante qui nécessitent d'être rafraichie 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
en
joe
:
ALTER COLLATION "en_US" OWNER TO joe;
Il n'y a pas de commande ALTER COLLATION
dans
le standard SQL.