oid2name — résoudre les OID et les noms de fichiers dans le répertoire des données de PostgreSQL
oid2name
[option
...]
oid2name est un outil qui aide les administrateurs à examiner la structure des fichiers utilisée par PostgreSQL. Pour l'utiliser, vous devez être connaître la structure de fichiers utilisée de la base de données. Elle est décrite dans Chapitre 69.
Le nom « oid2name » est historique, et est maintenant plutôt contradictoire car la plupart du temps, quand vous l'utiliserez, vous aurez besoin de connaître les numéroes filenode des tables (qui sont le nom des fichiers visibles dans les répertoires des bases de données). Assurez-vous de bien comprendre la différence entre les OID des tables et leur filenode !
oid2name se connecte à une base de données cible et extrait OID, filenode, et/ou nom de table. Vous pouvez aussi afficher les OID des bases et des tablespaces.
oid2name accepte les arguments suivants en ligne de commande :
-f
filenode
affiche des informations sur la table identifiée par filenode
-i
inclut les index et séquences dans la liste
-o
oid
affiche des informations sur la table d'OID oid
-q
omet les en-têtes (utile pour scripter)
-s
affiche les OID des tablespaces
-S
inclut les objets systèmes (ceux compris dans les schémas
information_schema
, pg_toast
et
pg_catalog
)
-t
motif_nom_table
affiche des informations sur les tables dont le nom correspond au motif motif_nom_table
-V
--version
Affiche la version d'oid2name, puis quitte.
-x
affiche plus d'informations sur chaque objet affiché : nom du tablespace, nom du schéma et OID
-?
--help
Affiche l'aide sur les arguments en ligne de commande de oid2name, puis quitte.
oid2name accepte aussi les arguments suivants sur la ligne de commande, en tant que paramètres de connexion :
-d
nom_base
base de données où se connecter
-H
hôte
hôte du serveur de base de données
-p
port
port du serveur de base de données
-U
nom_utilisateur
nom d'utilisateur pour la connexion
-P
mot_de_passe
mot de passe (obsolète -- placer cette information sur la ligne de commande introduit un risque de sécurité)
Pour afficher des tables spécifiques, sélectionnez les tables à afficher
en utilisant -o
, -f
et/ou
-t
.
-o
prend un OID,
-f
prend un filenode,
et -t
prend un nom de table (en fait, c'est un modèle
de type LIKE
, donc vous pouvez utiliser
foo%
par
exemple). Vous pouvez utiliser autant d'options que vous le souhaitez, et
la liste incluera tous les objets en se basant sur chaque options. Mais
notez que ces options peuvent seulement afficher des objets appartenant
à la base de données indiquée par l'option -d
.
Si vous n'utilisez pas -o
, -f
et
-t
, mais que vous passez l'option -d
,
cela listera toutes les tables dans la base nommée par l'option
-d
. Dans ce mode, les options -S
et
-i
contrôlent ce qui est listé.
Si vous ne passez pas non plus -d
, cela affichera une
liste des OID de bases de données. Autrement, vous pouvez passer l'option
-s
pour obtenir une liste des tablespaces.
oid2name requiert une base de données en cours d'exécution avec des catalogues systèmes non corrompus. Du coup, son utilisation est assez limitée si le but est de restaurer certains objets après une corruption importante de la base de données.
$ # quelles sont les bases disponibles ? $ oid2name All databases: Oid Database Name Tablespace ---------------------------------- 17228 alvherre pg_default 17255 regression pg_default 17227 template0 pg_default 1 template1 pg_default $ oid2name -s All tablespaces: Oid Tablespace Name ------------------------- 1663 pg_default 1664 pg_global 155151 fastdisk 155152 bigdisk $ # OK, jetons un œil à la base alvherre $ cd $PGDATA/base/17228 $ # récupérons les 10 premiers objets de la base dans le tablespace par défaut $ # et triés par taille $ ls -lS * | head -10 -rw------- 1 alvherre alvherre 136536064 sep 14 09:51 155173 -rw------- 1 alvherre alvherre 17965056 sep 14 09:51 1155291 -rw------- 1 alvherre alvherre 1204224 sep 14 09:51 16717 -rw------- 1 alvherre alvherre 581632 sep 6 17:51 1255 -rw------- 1 alvherre alvherre 237568 sep 14 09:50 16674 -rw------- 1 alvherre alvherre 212992 sep 14 09:51 1249 -rw------- 1 alvherre alvherre 204800 sep 14 09:51 16684 -rw------- 1 alvherre alvherre 196608 sep 14 09:50 16700 -rw------- 1 alvherre alvherre 163840 sep 14 09:50 16699 -rw------- 1 alvherre alvherre 122880 sep 6 17:51 16751 $ # à quoi correspond le fichier 155173 ? $ oid2name -d alvherre -f 155173 From database "alvherre": Filenode Table Name ---------------------- 155173 accounts $ # vous pouvez demander plus d'un objet à la fois $ oid2name -d alvherre -f 155173 -f 1155291 From database "alvherre": Filenode Table Name ------------------------- 155173 accounts 1155291 accounts_pkey $ # vous pouvez mélanger les options et obtenir plus de détails avec -x $ oid2name -d alvherre -t accounts -f 1155291 -x From database "alvherre": Filenode Table Name Oid Schema Tablespace ------------------------------------------------------ 155173 accounts 155173 public pg_default 1155291 accounts_pkey 1155291 public pg_default $ # affiche l'espace disque pour chaque objet d'une base de données $ du [0-9]* | > while read SIZE FILENODE > do > echo "$SIZE `oid2name -q -d alvherre -i -f $FILENODE`" > done 16 1155287 branches_pkey 16 1155289 tellers_pkey 17561 1155291 accounts_pkey ... $ # pareil, mais trié par taille $ du [0-9]* | sort -rn | while read SIZE FN > do > echo "$SIZE `oid2name -q -d alvherre -f $FN`" > done 133466 155173 accounts 17561 1155291 accounts_pkey 1177 16717 pg_proc_proname_args_nsp_index ... $ # Si vous voulez voir ce qu'il y a dans un tablespace, utilisez le répertoire $ # pg_tblspc $ cd $PGDATA/pg_tblspc $ oid2name -s All tablespaces: Oid Tablespace Name ------------------------- 1663 pg_default 1664 pg_global 155151 fastdisk 155152 bigdisk $ # quelle base de données a des objets dans le tablespace "fastdisk" ? $ ls -d 155151/* 155151/17228/ 155151/PG_VERSION $ # Oh, quelle était la base de données 17228 ? $ oid2name All databases: Oid Database Name Tablespace ---------------------------------- 17228 alvherre pg_default 17255 regression pg_default 17227 template0 pg_default 1 template1 pg_default $ # Voyons si quels objets de cette base sont dans ce tablespace. $ cd 155151/17228 $ ls -l total 0 -rw------- 1 postgres postgres 0 sep 13 23:20 155156 $ # OK, c'est une table très petite, mais laquelle est-ce ? $ oid2name -d alvherre -f 155156 From database "alvherre": Filenode Table Name ---------------------- 155156 foo
B. Palmer <bpalmer@crimelabs.net>