oid2name

oid2name — resolver OIDs y nodos de archivos en un directorio de datos de PostgreSQL

Synopsis

oid2name [opción...]

Descripció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.

Note

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.

Opciones

oid2name acepta los siguientes argumentos de línea de comandos:

-f filenode
--filenode=filenode

muestra información para la tabla con el filenode filenode.

-i
--indexes

incluye índices y secuencias en el listado.

-o oid
--oid=oid

muestra información para la tabla con el OID oid.

-q
--quiet

omite los encabezados (útil para scripts).

-s
--tablespaces

muestra los OIDs de los tablespaces.

-S
--system-objects

incluye objetos del sistema (aquellos en los esquemas information_schema, pg_toast y pg_catalog).

-t patron_nombre_tabla
--table=patron_nombre_tabla

muestra información para las tablas que coincidan con patron_nombre_tabla.

-V
--version

Muestra la versión de oid2name y sale.

-x
--extended

muestra más información sobre cada objeto mostrado: nombre del tablespace, nombre del esquema y OID.

-?
--help

Muestra 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.

Entorno

PGHOST
PGPORT
PGUSER

Pará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.

Notas

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.

Ejemplos

$ # ¿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

Autor

B. Palmer