PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 15.6 » Référence » Commandes SQL » ALTER COLLATION

ALTER COLLATION

ALTER COLLATION — modifie la définition d'une collation

Synopsis

ALTER COLLATION name REFRESH VERSION

ALTER COLLATION nom RENAME TO nouveau_nom
ALTER COLLATION nom OWNER TO { nouveau_propriétaire | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER COLLATION nom SET SCHEMA nouveau_schéma
  

Description

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 droit 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 superutilisateur peut modifier le propriétaire de n'importe quelle collation.)

Paramètres

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.

Notes

Quand un objet de collation est créé, la version spécifique du fournisseur de la collation est enregistrée dans le catalogue système. 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 cela peut néanmoins arriver dans certaines circonstances légitimes, telles que la mise à jour d'un système d'exploitation vers une nouvelle version majeure ou 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 de la collation 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. Lors de l'utilisation de collations fournies par ICU, l'information de version est fournie par la bibliothèque ICU et est disponible sur toutes les plateformes.

Note

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.

Pour la collation par défaut de la base, il existe une commande analogue appelée ALTER DATABASE ... REFRESH COLLATION VERSION.

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;

Exemples

Pour renommer la collation de_DE en german :

ALTER COLLATION "de_DE" RENAME TO german;
   

Pour changer le propriétaire la propriété de la collation en_US par joe :

ALTER COLLATION "en_US" OWNER TO joe;
   

Compatibilité

Il n'y a pas de commande ALTER COLLATION dans le standard SQL.