pg_amcheck — vérifie la corruption d'une ou plusieurs bases de données PostgreSQL
pg_amcheck
[option
...] [nom_base
]
pg_amcheck exécute les fonctions de vérification de corruption fournies par amcheck sur une ou plusieurs bases de données, avec des options pour sélectionner schémas, tables et index à vérifier, et s'il faut réaliser les tests en parallèle et, si oui, le nombre de connexions parallélisées à établir et utiliser.
Seuls les relations de tables ordinaires et de tables TOAST, les vues matérialisées, les séquences et les index BTree sont actuellement acceptés. Les autres types de relation sont silencieusement ignorés.
Si nom_base
est précisé, elle devra correspondre au nom
d'une base à vérifier, et aucune autre option de sélection de base ne
devra être présente. Sinon, toutes les bases correspondantes seront
vérifiées. Si aucune de ces options n'est présente, la base de données par
défaut sera vérifiée. Les options de sélection de bases incluent
--all
, --database
et
--exclude-database
. Elles incluent aussi
--relation
, --exclude-relation
,
--table
, --exclude-table
,
--index
et --exclude-index
, mais
seulement quand de telles options sont utilisées avec un motif en trois
parties(par exemple, mabase*.monschema*.marelation*
).
Enfin, elles incluent --schema
et
--exclude-schema
quand ces options sont utilisées avec un
motif en deux parties(par exemple, mabase*.monschema*
).
nom_base
peut aussi être remplacé par une chaîne de connexion.
Les lignes de commande suivante contrôlent ce qui doit être vérifié :
-a
--all
Vérifie toutes les bases de données, sauf celles exclues avec
--exclude-database
.
-d motif
--database=motif
Vérifie les bases de données correspondant au
motif
,
indiqué en dehors de celles exclues par l'option
--exclude-database
. Cette option peut être utilisée
plus d'une fois.
-D motif
--exclude-database=motif
Exclut les bases de données correspondant au
motif
indiqué. Cette option peut être utilisée plus d'une fois.
-i motif
--index=motif
Vérifie les index correspondant au
motif
indiqué, sauf s'ils sont exclus d'une autre façon. Cette option peut
être utilisée plus d'une fois.
Ceci est similaire à l'option --relation
, sauf qu'il
s'applique seulement aux index, et non pas aux autres types de relation.
-I motif
--exclude-index=motif
Exclut les index correspondant au
motif
indiqué. Cette option peut être utilisée plus d'une fois.
Ceci est similaire à l'option --exclude-relation
, sauf qu'il
s'applique seulement aux index, et non pas aux autres types de relation.
-r motif
--relation=motif
Vérifie les relations correspondant au
motif
indiqué, sauf si elles sont exclues autrement. Cette option peut être
utilisée plus d'une fois.
Les motifs peuvent être sans qualification de schéma, par exemple
marelation*
, ou ils peuvent avoir une qualification
comme monschema*.marelation*
ou une qualification
de base et de schéma, par exemple
mabase*.monschema*.marelation*
. Un motif avec une
qualification de base ajoutera la correspondance de bases à la liste
des bases de données à vérifier.
-R motif
--exclude-relation=motif
Exclut les relations correspondant au
motif
indiqué. Cette option peut être utilisée plus d'une fois.
Comme avec --relation
, le
motif
peut être sans qualification, qualité du schéma, qualifié du schéma et
de la base.
-s motif
--schema=motif
Vérifie les tables et indexes des schémas correspondant au
motif
indiqué, sauf s'ils sont exclus autrement. Cette option peut être
utilisée plus d'une fois.
Pour sélectionner seulement les tables dans les schémas correspondant à
un motif particulier, considérez l'utilisation de quelque chose comme
--table=MOTIFSCHEMA.* --no-dependent-indexes
. Pour
sélectionner seulement les index, considérez l'utilisation de quelque
chose comme --index=MOTIFSCHEMA.*
.
Un motif de schémas pourrait être qualifié du nom de base. Par exemple,
vous pourriez écrire --schema=mabase*.monschema*
pour sélectionner les schémas correspondant à
monschema*
dans les bases de données correspondant à
mabase*
.
-S motif
--exclude-schema=motif
Exclut les tables et index dans les schémas correspondant au
motif
indiqué. Cette option peut être utilisée plus d'une fois.
Comme avec --schema
, le motif peut être qualifié du
nom de la base.
-t motif
--table=motif
Vérifie les tables correspondant au
motif
indiqué, sauf si elles sont exclues autrement. Cette option peut être
utilisée plus d'une fois.
Ceci est similaire à l'option --relation
, sauf qu'elle
s'applique seulement aux tables, vues matérialisées et séquences, et non pas aux index.
-T motif
--exclude-table=motif
Exclut les tables correspondant au
motif
indiqué. Cette option peut être utilisée plus d'une fois.
Ceci est similaire à l'option --exclude-relation
, sauf
qu'elle s'applique seulement aux tables, vues matérialisées et séquences, et non pas aux index.
--no-dependent-indexes
Par défaut, si une table est vérifiée, tout index btree de cette table
est lui-aussi vérifié, même s'ils ne sont pas explicitement sélectionnés
par une option telle que --index
ou
--relation
. Cette option désactive ce comportement.
--no-dependent-toast
Par défaut, si une table est vérifiée, sa table TOAST sera aussi
vérifiée, même si elle n'est pas explicitement sélectionnée par une
option telle que --table
ou
--relation
. Cette option désactive ce comportement.
--no-strict-names
Par défaut, si un argument de --database
,
--table
, --index
ou --relation
ne correspond à aucun objet,
ceci est traité comme une erreur fatale. Cette option diminue
le niveau de l'erreur à un simple message d'avertissement.
Les options en ligne de commande suivantes contrôlent la vérification des tables :
--exclude-toast-pointers
Par défaut, quand un pointeur TOAST est rencontré sur une table, une recherche est réalisée pour s'assurer qu'elle référence toujours des entrés apparemment valides dans la table TOAST. Ces vérifications peuvent être assez lentes, et cette option peut être utilisée pour ne pas les faire.
--on-error-stop
Après avoir affiché toutes les corruptions du premier bloc d'une table om une corruption a été trouvé, arrête le traitement de cette table et continue avec la prochaine table ou le prochain index.
Notez que cette vérification des index s'arrête toujours après le premier bloc corrompu. Cette option a seulement les tables pour cible.
--skip=option
Si all-frozen
est indiqué, les vérifications de
corruption de table ignoreront les blocs des tables marqués
comme gelés entièrement.
Si all-visible
est indiqué, les vérifications de
corruption de table ignoreront les blocs des tables marqués comme
visibles entièrement.
Par défaut, aucun bloc n'est ignoré. Ceci peut être indiqué avec
none
mais comme il s'agit de la valeur par défaut, il
n'est pas nécessaire de le mentionner.
--startblock=bloc
Commence la vérification au numéro de bloc mentionné. Une erreur
surviendra si la table en cours de vérification a moins de blocs que
ce numéro. Cette option ne s'applique pas aux index et est probablement
uniquement utile lors de la vérification d'une seule table. Voir
--endblock
pour d'autres mises en garde.
--endblock=bloc
Termine la vérification au numéro de bloc mentionné. Une erreur
surviendra si la table en cours de vérification a moins de blocs que
ce numéro. Cette option ne s'applique pas aux index et est probablement
uniquement utile lors de la vérification d'une seule table. Si une table
normale et une table TOAST sont vérifiées, cette option s'appliquera aux
deux mais des blocs supérieurs du TOAST pourraient être accédés pour
valider les pointeurs des valeurs TOAST, sauf si cela est désactivé avec
l'option --exclude-toast-pointers
.
Les options en ligne de commande suivantes contrôlent la vérification des index B-tree :
--checkunique
Pour chaque index vérifié avec une contrainte d'unicité, vérifie
que pas plus d'une entrée parmi les entrées dupliquées n'est visible
dans un index utilisant l'option checkunique
de
amcheck.
--heapallindexed
Pour chaque index vérifié, vérifie la présence de toutes les lignes de
la table comme enregistrements dans l'index en utilisant l'option
heapallindexed
d'amcheck.
--parent-check
Pour chaque index btree vérifié, utilisez la fonction
bt_index_parent_check
d' amcheck,
qui réalise des vérifications supplémentaires des relations parent/enfant
lors de la vérification de l'index.
Le comportement par défaut est d'utiliser la fonction
bt_index_check
d'amcheck, mais notez que l'utilisation de
l'option --rootdescend
sélectionne implicitement
bt_index_parent_check
.
--rootdescend
Pour chaque index vérifié, retrouve les lignes au niveau feuille en
réalisant une nouvelle recherche du bloc racine pour chaque ligne en
utilisant l'option rootdescend
d'amcheck.
Utiliser cette option implicitement sélectionne aussi l'option
--parent-check
.
Cette forme de vérification a été écrit à l'origine pour aider au développement des fonctionnalités de l'index btree. Elle sera d'utilisation limitée, voire inutile, pour aider à la détection de corruptions survenant réellement. Elle pourrait aussi faire que la vérification de corruption prenne beaucoup plus de temps et consomme beaucoup plus de ressources sur le serveur.
Les vérifications supplémentaires réalisées avec les index B-tree quand
l'option --parent-check
ou l'option
--rootdescend
sont spécifiées nécessitent des verrous
relativement fort sur les relations. Ce sont les seules vérifications qui
bloquent les modifications concurrentes de données par les commandes
INSERT
, UPDATE
et
DELETE
.
Les options en ligne de commande suivantes contrôlent la connexion au serveur :
-h nom_hôte
--host=nom_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 l'extension du fichier local de la socket de domaine Unix sur lequel le serveur attend les connexions.
-U
--username=nom_rôle
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 pg_amcheck à demander un mot de passe avant la connexion à une base de données.
Cette option n'est jamais obligatoire car
pg_amcheck demandera automatiquement un mot
de passe si le serveur exige une authentification par mot de passe.
Néanmoins, pg_amcheck 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
Indique le nom de la base ou une chaîne de connexion à utiliser pour
récupérer la liste des bases à vérifier. Si ni --all
ni d'autres options incluant un motif de nom de bases de données n'est
utilisé, cette connexion n'est pas nécessaire et cette option ne fera
rien. Sinon, tous les paramètres de la chaîne de connexion autre que
le nom de le base, qui sont inclus dans la valeur pour cette option,
seront aussi utilisés pour se connecter aux bases de données à
vérifier. Si cette option est omise, la valeur par défaut est
postgres
ou, en cas d'échec,
template1
.
D'autres options sont aussi disponibles :
-e
--echo
Afficher sur la sortie standard toutes les requêtes SQL envoyées au serveur.
-j nombre
--jobs=nombre
Utilise nombre
connexions concurrentes au
serveur ou une par objet à vérifier, suivant ce qui fera le moins de
connexions.
Par défaut, utilise une seule connexion.
-P
--progress
Affiche des informations de progression. Ces dernières inclient le nombre de relations pour lesquelles la vérification est terminée, et la taille totale de ces relations. Elles incluent aussi le nombre total de relations qui devront être vérifiées et la taille estimée de ces relations.
-v
--verbose
Affiche plus de messages. En particulier, cela affichera un message pour chaque relation en cours de vérification, et cela accroitera le niveau de détails utilisé pour les erreurs du serveur.
-V
--version
Affiche la version de pg_amcheck, puis quitte.
--install-missing
--install-missing=schema
Installe toute extension manquante requise pour vérifier les bases de
données. S'ils ne sont pas encore installés, les objets de chaque
extension seront installés dans le schéma schema
. S'il n'est pas spécifié, ils
iront dans le schéma pg_catalog
.
Actuellement, la seule extension requise est amcheck.
-?
--help
Affiche l'aide sur les arguments en ligne de commande de pg_amcheck, puis quitte.
pg_amcheck
, comme la plupart des outils de la
distribution PostgreSQL, utilise aussi les
variables d'environnement acceptées par libpq
(voir Section 32.15).
La variable d'environnement PG_COLOR
indique s'il faut
utiliser, ou pas, les couleurs dans les messages de diagnostique. Les
valeurs possibles sont always
, auto
et never
.
pg_amcheck est conçu pour fonctionner avec PostgreSQL 14.0 et ultérieur.