oid2name — resolver OIDs y nodos de archivos en un directorio de datos de PostgreSQL
oid2name [opción...]
oid2name es un programa de utilidad que ayuda a los administradores a examinar la estructura de archivos utilizada por PostgreSQL. Para hacer uso de él, debes estar familiarizado con la estructura de archivos de la base de datos, la cual se describe en la Chapter 66.
El nombre “oid2name” es histórico y, en realidad, bastante engañoso, ya que la mayor parte del tiempo que lo uses, realmente te interesarás por los números de filenode de las tablas (que son los nombres de archivo visibles en los directorios de la base de datos). ¡Asegúrate de entender la diferencia entre los OIDs de tabla y los filenodes de tabla!
oid2name se conecta a una base de datos de destino y extrae información de OID, filenode y/o nombre de tabla. También puedes hacer que muestre los OIDs de la base de datos o los OIDs de los tablespaces.
oid2name acepta los siguientes argumentos de línea de comandos:
-f filenode--filenode=filenodemuestra información para la tabla con el filenode filenode.
-i--indexesincluye índices y secuencias en el listado.
-o oid--oid=oidmuestra información para la tabla con el OID oid.
-q--quietomite los encabezados (útil para scripts).
-s--tablespacesmuestra los OIDs de los tablespaces.
-S--system-objectsincluye objetos del sistema (aquellos en los esquemas
information_schema, pg_toast
y pg_catalog).
-t patron_nombre_tabla--table=patron_nombre_tablamuestra información para las tablas que coincidan con patron_nombre_tabla.
-V--versionMuestra la versión de oid2name y sale.
-x--extendedmuestra más información sobre cada objeto mostrado: nombre del tablespace, nombre del esquema y OID.
-?--helpMuestra ayuda sobre los argumentos de línea de comandos de oid2name y sale.
Para mostrar tablas específicas, selecciona qué tablas mostrar utilizando
-o, -f y/o -t.
-o toma un OID,
-f toma un filenode,
y -t toma un nombre de tabla (en realidad, es un patrón LIKE,
por lo que puedes usar cosas como foo%).
Puedes utilizar tantas de estas opciones como desees, y el listado incluirá todos los objetos
que coincidan con cualquiera de las opciones. Pero ten en cuenta que estas opciones solo pueden
mostrar objetos en la base de datos indicada por -d.
Si no proporcionas ninguno de los parámetros -o, -f o -t,
pero sí proporcionas -d, se listarán todas las tablas en la base de datos
nombrada por -d. En este modo, las opciones -S e
-i controlan lo que se lista.
Si tampoco proporcionas -d, se mostrará un listado de los OIDs de
la base de datos. Alternativamente, puedes proporcionar -s para obtener un listado
de los tablespaces.
PGHOSTPGPORTPGUSERParámetros de conexión predeterminados.
Esta utilidad, al igual que la mayoría de las demás utilidades de PostgreSQL, también utiliza las variables de entorno admitidas por libpq (consulta la Section 32.15).
La variable de entorno PG_COLOR especifica si se debe utilizar
color en los mensajes de diagnóstico. Los valores posibles son
always, auto y
never.
oid2name requiere un servidor de base de datos en ejecución con catálogos del sistema no dañados. Por lo tanto, tiene un uso limitado para recuperarse de situaciones de corrupción catastrófica de la base de datos.
$ # ¿qué hay en este servidor de bases de datos, de todos modos?
$ 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, echemos un vistazo a la base de datos alvherre
$ cd $PGDATA/base/17228
$ # obtener los 10 objetos principales de la base de datos en el tablespace predeterminado, ordenados por tamaño
$ 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
$ # ¿Qué archivo es 155173?
$ oid2name -d alvherre -f 155173
From database "alvherre":
Filenode Table Name
----------------------
155173 accounts
$ # puedes preguntar por más de un objeto
$ oid2name -d alvherre -f 155173 -f 1155291
From database "alvherre":
Filenode Table Name
-------------------------
155173 accounts
1155291 accounts_pkey
$ # puedes mezclar las opciones y obtener más detalles con -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
$ # mostrar el espacio en disco para cada objeto de la base de datos
$ 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
...
$ # lo mismo, pero ordenado por tamaño
$ 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 deseas ver qué hay en los tablespaces, utiliza el directorio pg_tblspc
$ cd $PGDATA/pg_tblspc
$ oid2name -s
All tablespaces:
Oid Tablespace Name
-------------------------
1663 pg_default
1664 pg_global
155151 fastdisk
155152 bigdisk
$ # ¿qué bases de datos tienen objetos en el tablespace "fastdisk"?
$ ls -d 155151/*
155151/17228/ 155151/PG_VERSION
$ # Ah, ¿cuál era la base de datos 17228 otra vez?
$ oid2name
All databases:
Oid Database Name Tablespace
----------------------------------
17228 alvherre pg_default
17255 regression pg_default
17227 template0 pg_default
1 template1 pg_default
$ # Veamos qué objetos tiene esta base de datos en el tablespace.
$ cd 155151/17228
$ ls -l
total 0
-rw------- 1 postgres postgres 0 sep 13 23:20 155156
$ # OK, esta es una tabla bastante pequeña ... pero ¿cuál es?
$ oid2name -d alvherre -f 155156
From database "alvherre":
Filenode Table Name
----------------------
155156 foo
B. Palmer <[email protected]>