Documentation PostgreSQL 15.15 » Référence » Commandes SQL » ALTER INDEX

Précédent | Niveau supérieur | Suivant
ALTER GROUP | Sommaire | ALTER LANGUAGE

## ALTER INDEX

ALTER INDEX — Modifier la définition d'un index

## Synopsis

    ALTER INDEX [ IF EXISTS ] nom RENAME TO nouveau_nom
    ALTER INDEX [ IF EXISTS ] nom SET TABLESPACE nom_tablespace
    ALTER INDEX nom ATTACH PARTITION nom_index
    ALTER INDEX nom [ NO ] DEPENDS ON EXTENSION nom_extension
    ALTER INDEX [ IF EXISTS ] nom SET ( paramètre_stockage [= valeur] [, ... ] )
    ALTER INDEX [ IF EXISTS ] nom RESET ( paramètre_stockage [, ... ] )
    ALTER INDEX [ IF EXISTS ] nom ALTER [ COLUMN ] numéro_colonne
        SET STATISTICS integer
    ALTER INDEX ALL IN TABLESPACE nom [ OWNED BY nom_rôle [, ... ] ]
        SET TABLESPACE nouveau_tablespace [ NOWAIT ]

## Description

`ALTER INDEX` modifie la définition d'un index. Il y a plusieurs variantes décrites ci-dessous. Notez que le niveau de verrouillage requis peut différer entre chaque. Un verrou de niveau `ACCESS EXCLUSIVE` est pris, sauf exception dûment précisée. Lorsque plusieurs sous-commandes sont listées, le verrou pris sera le plus strict de l'ensemble des sous-commandes.

`RENAME`

  La forme `RENAME` modifie le nom de l'index. Si l'index est associé avec une contrainte de table (soit `UNIQUE`, soit `PRIMARY KEY`, soit `EXCLUDE`), la contrainte est elle-aussi renommée. Cela n'a aucun effet sur les données stockées.

  Le renommage d'index acquiert un verrou de niveau `SHARE UPDATE EXCLUSIVE`.

`SET TABLESPACE`

  Cette forme remplace le tablespace de l'index par le tablespace spécifié et déplace les fichiers de données associés à l'index dans le nouveau tablespace. Pour modifier le tablespace d'un index, vous devez être le propriétaire de l'index et avoir le droit `CREATE` sur le nouveau tablespace. Toutes les index d'un tablespace de la base de données actuelle peuvent être déplacés en utilisant la forme `ALL IN TABLESPACE`, qui verrouillera tous les index à déplacer, puis les déplacera un par un. Cette forme supporte aussi la clause `OWNED BY`, qui ne déplacera que les index dont les propriétaires sont indiqués. Si l'option `NOWAIT` est spécifié, alors la commande échouera si elle est incapable de récupérer immédiatement tous les verrous requis. Notez que les catalogues systèmes ne seront pas déplacés par cette commande. Dans ce cas, il faut utiliser `ALTER DATABASE` ou `ALTER INDEX`. Voir aussi `CREATE TABLESPACE`.

`ATTACH PARTITION `nom_index``

  Attache l'index nommé (potentiellement qualifié du schéma) à l'index modifié. L'index nommé doit être sur une partition de la table contenant l'index à modifier et avoir une définition équivalente. Un index attaché ne peut pas être lui-même supprimé. Il sera automatiquement supprimé si son index parent est supprimé.

`DEPENDS ON EXTENSION `nom_extension``
`NO DEPENDS ON EXTENSION `nom_extension``

  Cette clause marque l'index comme dépendant de l'extension ou comme indépendant de l'extension si le mot-clé `NO` est ajouté. Un index dépendant d'une extension est automatiquement supprimé quand l'extension est supprimée.

`SET ( `paramètre_stockage` [= `valeur`] [, ... ] )`

  Cette forme modifie un ou plusieurs paramètres spécifiques à la méthode d'indexage de cet index. Voir `CREATE INDEX` pour les détails sur les paramètres disponibles. Notez que le contenu de l'index ne sera pas immédiatement modifié par cette commande ; suivant le paramètre, vous pourrez avoir besoin de reconstruire l'index avec `REINDEX` pour obtenir l'effet désiré.

`ALTER [ COLUMN ] `numéro_colonne` SET STATISTICS `integer``

  Cette syntaxe configure la cible de récupération des statistiques par colonne pour les opérations `ANALYZE` qui suivront, mais peut être utilisé seulement sur les colonnes d'index définies sous la forme d'une expression. Comme les expressions n'ont pas de nom unique, nous faisons référence à elles en utilisant le numéro ordinal de la colonne d'index. La cible peut être configurée sur l'intervalle 0 à 10000. Une configuration à -1 annule l'ancienne configuration pour revenir à l'utilisation de la cible statistique par défaut du système (default_statistics_target). Pour plus d'informations sur l'utilisation de statistiques par l'optimiseur de requêtes de PostgreSQL, référez-vous à Section 14.2.

`SET ( `paramètre_stockage` [= `valeur`] [, ... ] )`

  Cette forme modifie un ou plusieurs paramètres spécifiques à la méthode d'indexage de cet index. Voir CREATE INDEX pour les détails sur les paramètres disponibles. Notez que le contenu de l'index ne sera pas immédiatement modifié par cette commande ; suivant le paramètre, vous pouvez avoir besoin de reconstruire l'index avec REINDEX pour obtenir l'effet désiré.

`RESET ( `paramètre_stockage` [, ... ] )`

  Cette forme réinitialise un ou plusieurs paramètres de stockage spécifiques à la méthode d'indexage à leurs valeurs par défaut. Comme avec `SET`, un `REINDEX` peut être nécessaire pour mettre à jour l'index complètement.

## Paramètres

`IF EXISTS`

  Ne retourne par d'erreur si l'index n'existe pas. Seul un message d'avertissement est retourné dans ce cas.

`numéro_colonne`

  Ce numéro fait référence à la position ordinale (de gauche à droite) de la colonne de l'index.

`nom`

  Le nom de l'index à modifier (éventuellement qualifié du nom du schéma).

`nouveau_nom`

  Le nouveau nom de l'index.

`nom_tablespace`

  Le nom du tablespace dans lequel déplacer l'index.

`nom_extension`

  Le nom de l'extension dont l'index dépend.

`paramètre_stockage`

  Le nom du paramètre de stockage spécifique à la méthode d'indexage.

`valeur`

  La nouvelle valeur du paramètre de stockage spécifique à la méthode d'indexage. Cette valeur peut être un nombre ou une chaîne suivant le paramètre.

## Notes

Ces opérations sont aussi possibles en utilisant `ALTER TABLE`. `ALTER INDEX` n'est en fait qu'un alias pour les formes d'`ALTER TABLE` qui s'appliquent aux index.

Auparavant, il existait une variante `ALTER INDEX OWNER` mais elle est maintenant ignorée (avec un message d'avertissement). Un index ne peut pas avoir un propriétaire différent de celui de la table. Modifier le propriétaire de la table modifie automatiquement celui de l'index.

Il est interdit de modifier toute partie d'un index du catalogue système.

## Exemples

Renommer un index existant :

    ALTER INDEX distributeurs RENAME TO fournisseurs;

Déplacer un index dans un autre tablespace :

    ALTER INDEX distributeurs SET TABLESPACE espacelogiquerapide;

Pour modifier le facteur de remplissage d'un index (en supposant que la méthode d'indexage le supporte) :

    ALTER INDEX distributeurs SET (fillfactor = 75);
    REINDEX INDEX distributeurs;

Configure la cible de récupération des statistiques pour un index sur expression :

    CREATE INDEX coord_idx ON measured (x, y, (z + t));
    ALTER INDEX coord_idx ALTER COLUMN 3 SET STATISTICS 1000;

## Compatibilité

`ALTER INDEX` est une extension PostgreSQL.

## Voir aussi

CREATE INDEX, REINDEX