PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 14.11 » 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 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.)

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

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.

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.

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;

Exemples

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;
   

Compatibilité

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