Documentation PostgreSQL 14.22 » Référence » Applications client de PostgreSQL » vacuumdb

Précédent | Niveau supérieur | Suivant
reindexdb | Sommaire | Applications relatives au serveur PostgreSQL

## vacuumdb

vacuumdb — récupère l'espace inutilisé et, optionnellement, analyse une base de données PostgreSQL

## Synopsis

`vacuumdb` [`option_de_connexion`...] [`option`...] [ `-t` | `--table` `table` [( `colonne` [,...] )] ] ... [`nom_base`]

`vacuumdb` [`options_de_connexion`...] [`option`...] `-a` | `--all`

## Description

vacuumdb est un outil de nettoyage d'une base de données. vacuumdb peut également engendrer des statistiques internes utilisées par l'optimiseur de requêtes de PostgreSQL.

vacuumdb est une surcouche de la commande `VACUUM`. Il n'y a pas de différence réelle entre exécuter des VACUUM et des ANALYZE sur les bases de données via cet outil et via d'autres méthodes pour accéder au serveur.

## Options

vacuumdb accepte les arguments suivants sur la ligne de commande :

`-a`
`--all`

  Nettoie toutes les bases de données.

`[-d] `nom_base``
`[--dbname=]`nom_base``

  Spécifie le nom de la base à nettoyer ou à analyser quand l'option `-a`/`--all` n'est pas utilisée. Si le nom de la base n'est pas fourni, il est lu à partir de la variable d'environnement `PGDATABASE`. Si elle n'est pas configurée, le nom de l'utilisateur pour la connexion est utilisé. Ce nom de base peut être remplacé par une chaîne de connexion. Dans ce cas, les paramètres de la chaîne de connexion surchargeront toutes les options en ligne de commande conflictuelles.

`--disable-page-skipping`

  Désactive l'utilisation de la Visibility Map permettant d'ignorer certains blocs.

  ### Note

  Cette option est seulement disponible pour les serveurs exécutant PostgreSQL 9.6 et ultérieurs.

`-e`
`--echo`

  Affiche les commandes que vacuumdb engendre et envoie au serveur.

`-f`
`--full`

  Exécute un nettoyage « complet ».

`-F`
`--freeze`

  « Gèle » agressivement les lignes.

`--force-index-cleanup`

  Supprime toujours les entrées d'index pointant vers des lignes mortes.

  ### Note

  Cette option est seulement disponible pour les serveurs en version 12 et ultérieures.

`-j `njobs``
`--jobs=`njobs``

  Exécute les commandes VACUUM et/ou ANALYZE en parallèle en plaçant `njobs` commandes simultanément. Cette option réduit la durée du traitement tout en augmentant la charge sur le serveur de bases de données.

  vacuumdb ouvrira `njobs` connexions sur la base de données, donc assurez-vous que votre configuration du paramètre max_connections est suffisamment élevée pour accepter toutes les connexions nécessaires.

  Notez que l'utilisation de ce mode avec l'option `-f` (`FULL`) pourrait causer des échecs de type deadlock si certains catalogues systèmes sont traités en parallèle.

`--min-mxid-age `age_mxid``

  Exécute les commandes VACUUM et ANALYZE sur les tables dont l'âge de l'identifiant multixact est d'au moins `age_mxid`. Cette option est utile pour prioriser les tables à traiter pour prévenir un bouclage des identifiants multixact (voir la Section 25.1.5.1).

  Aux fins de cette option, l'âge de l'identifiant multixact d'une relation est le plus grand âge de la relation principale et de la relation TOAST associée si cette dernière existe. Comme les commandes exécutées par vacuumdb traitera aussi la table TOAST de la relation si nécessaire, il n'est pas nécessaire de la considérer séparément.

  ### Note

  Cette option est seulement utile pour les serveurs exécutant PostgreSQL 9.6 et ultérieurs.

`--min-xid-age `age_xid``

  Exécute les commandes VACUUM et ANALYZE sur les tables dont l'âge de l'identifiant de transaction est d'au moins `age_xid`. Cette option est utile pour prioriser les tables à traiter pour prévenir un bouclage des identifiants de transaction (voir la Section 25.1.5.1).

  Aux fins de cette option, l'âge de l'identifiant de transaction d'une relation est le plus grand âge de la relation principale et de la relation TOAST associée si cette dernière existe. Comme les commandes exécutées par vacuumdb traitera aussi la table TOAST de la relation si nécessaire, il n'est pas nécessaire de la considérer séparément.

  ### Note

  Cette option est seulement utile pour les serveurs exécutant PostgreSQL 9.6 et ultérieurs.

`--no-index-cleanup`

  Ne supprime pas les entrées d'index pointaint vers des lignes mortes.

  ### Note

  Cette option est seulement disponible pour les serveurs en version 12 et supérieures.

`--no-process-toast`

  Ignore la table TOAST associée à la table en cours de traitement, s'il y en a une.

  ### Note

  Cette option est seulement disponible pour les serveurs en version 14 et supérieures.

`--no-truncate`

  Ne tronque pas les pages vides en fin de table.

  ### Note

  Cette option est seulement disponible pour les serveurs en version 12 et supérieures.

`-P `workers_parallelisation``
`--parallel=`workers_parallelisation``

  Indique le nombre de workers de parallélisation pour un vacuum parallélisé. Ceci permet au vacuum d'utiliser plusieurs CPU pour traiter les index. Voir VACUUM.

  ### Note

  Cette option est seulement disponible pour les serveurs PostgreSQL version 13 et supérieures.

`-q`
`--quiet`

  N'affiche pas de message de progression.

`--skip-locked`

  Ignore les relations qui ne peuvent pas immédiatement être verrouillées pour être traitées.

  ### Note

  Cette option est seulement utile pour les serveurs exécutant PostgreSQL 12 et ultérieurs.

`-t `table` [ (`colonne` [,...]) ]`
`--table=`table` [ (`colonne` [,...]) ]`

  Ne nettoie ou n'analyse que la table `table`. Des noms de colonnes peuvent être précisés en conjonction avec les options `--analyze` ou `--analyze-only`. Plusieurs tables peuvent être traitées par VACUUM en utilisant plusieurs fois l'option `-t`.

  ### Astuce

  Lorsque des colonnes sont indiquées, il peut être nécessaire d'échapper les parenthèses. (Voir les exemples plus bas.)

`-v`
`--verbose`

  Affiche des informations détaillées durant le traitement.

`-V`
`--version`

  Affiche la version de vacuumdb, puis quitte.

`-z`
`--analyze`

  Calcule aussi les statistiques utilisées par le planificateur.

`-Z`
`--analyze-only`

  Calcule seulement les statistiques utilisées par le planificateur (donc pas de VACUUM).

`--analyze-in-stages`

  Calcule seulement les statistiques utilisées par le planificateur (donc pas de VACUUM), comme `--analyze-only`. Effectue plusieurs (pour le moment trois) étapes de calcul avec différents réglages de configuration afin de générer des statistiques utilisables plus rapidement.

  Cette option est utile pour calculer les statistiques d'une base qui vient d'être peuplée, que cela soit à partir d'une restauration de sauvegarde ou d'un `pg_upgrade`. Cette option tentera de créer quelques statistiques le plus rapidement possible, pour rendre la base de données utilisable, et ensuite produire les statistiques complètes durant les étapes suivantes.

`-?`
`--help`

  Affiche l'aide sur les arguments en ligne de commande de vacuumdb, puis quitte.

vacuumdb accepte aussi les arguments suivants comme paramètres de connexion :

`-h `hôte``
`--host=`hôte``

  Indique le nom d'hôte de la machine qui héberge le serveur de bases de données. Si la valeur commence par une barre oblique (/), elle est utilisée comme répertoire pour la socket de domaine Unix.

`-p `port``
`--port=`port``

  Indique le port TCP ou le fichier local de socket de domaine Unix sur lequel le serveur attend les connexions.

`-U `utilisateur``
`--username=`utilisateur``

  Nom d'utilisateur pour la connexion.

`-w`
`--no-password`

  Ne demande jamais un mot de passe. Si le serveur en réclame un pour l'authentification et qu'un mot de passe n'est pas disponible d'une autre façon (par exemple avec le fichier `.pgpass`), la tentative de connexion échouera. Cette option peut être utile pour les scripts où aucun utilisateur n'est présent pour saisir un mot de passe.

`-W`
`--password`

  Force vacuumdb à demander un mot de passe avant la connexion à une base de données.

  Cette option n'est jamais obligatoire car vacuumdb demandera automatiquement un mot de passe si le serveur exige une authentification par mot de passe. Néanmoins, vacuumdb perdra une tentative de connexion pour trouver que le serveur veut un mot de passe. Dans certains cas, il est préférable d'ajouter l'option `-W` pour éviter la tentative de connexion.

`--maintenance-db=`nom_base_maintenance``

  Quand l'option `-a`/`--all` est utilisée, il se connecte à cette base pour récupérer la liste des bases à traiter. Si cette option n'est pas ajoutée, la base `postgres` sera utilisée. Si cette base n'existe pas, la base `template1` sera utilisée. Le nom de la base peut être remplacé par une chaîne de connexion. Dans ce cas, les paramètres de la chaîne de connexion surchargeront les options en ligne de commande conflictuelles. De plus, les paramètres de la chaîne de connexion autres que le nom de la base lui-même seront réutilisés lors de la connexion aux autres bases.

## Environnement

`PGDATABASE`
`PGHOST`
`PGPORT`
`PGUSER`

  Paramètres de connexion par défaut.

`PG_COLOR`

  Indique s'il faut utiliser des couleurs dans les messages de diagnostic. Les valeurs possibles sont `always`, `auto`, `never`.

Cet outil, comme la plupart des autres outils PostgreSQL, utilise aussi les variables d'environnement supportées par la bibliothèque libpq (voir Section 34.15).

## Diagnostics

En cas de difficultés, il peut être utile de consulter VACUUM et psql, sections présentant les problèmes éventuels et les messages d'erreur.

Le serveur de base de données doit fonctionner sur le serveur cible. Les paramètres de connexion éventuels et les variables d'environnement utilisés par la bibliothèque cliente libpq s'appliquent.

## Notes

vacuumdb peut avoir besoin de se connecter plusieurs fois au serveur PostgreSQL. Afin d'éviter de saisir le mot de passe à chaque fois, on peut utiliser un fichier `~/.pgpass`. Voir Section 34.16 pour plus d'informations.

## Exemples

Pour nettoyer la base de données `test` :

    $ vacuumdb test

Pour nettoyer et analyser une base de données nommée `grossebase` :

    $ vacuumdb --analyze grossebase

Pour nettoyer la seule table `foo` dans une base de données nommée `xyzzy` et analyser la seule colonne `bar` de la table :

    $ vacuumdb --analyze --verbose --table='foo(bar)' xyzzy

## Voir aussi

VACUUM