PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 13.17 » 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_USER | SESSION_USER }
ALTER COLLATION nom SET SCHEMA nouveau_schéma
  

Description

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.)

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

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;

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 en joe:

ALTER COLLATION "en_US" OWNER TO joe;
   

Compatibilité

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