Documentation PostgreSQL 14.22 » Référence » Commandes SQL » ALTER COLLATION

Précédent | Niveau supérieur | Suivant
ALTER AGGREGATE | Sommaire | ALTER CONVERSION

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

## Voir également

CREATE COLLATION, DROP COLLATION