oid2name

oid2name — resolve OIDs e nomes de arquivo em um diretório de dados do PostgreSQL

Sinopse

oid2name [opção...]

Descrição

O oid2name é um programa utilitário que ajuda os administradores a examinar a estrutura de arquivos usada pelo PostgreSQL. Para utilizá-lo, é necessário estar familiarizado com a estrutura de arquivos do banco de dados, descrita em Armazenamento físico do banco de dados.

Nota

O nome oid2name é histórico e, na verdade, um tanto enganoso, já que na maioria das vezes ao usá-lo, se estará realmente preocupado com os números dos filenodes [245] das tabelas (que são os nomes dos arquivos visíveis nos diretórios do banco de dados). Certifique-se de entender a diferença entre OID de tabela e filenode!

O utilitário oid2name conecta-se a um banco de dados de destino e extrai informações de OID, filenode e/ou nome de tabela. Também podem ser mostrados OIDs de bancos de dados e OIDs de espaços de tabelas.

Opções

O utilitário oid2name aceita os seguintes argumentos na linha de comando:

-f filenode
--filenode=filenode

mostra informações da tabela identificada pelo filenode.

-i
--indexes

inclui índices e sequências na listagem.

-o oid
--oid=oid

mostra informações para a tabela com o OID oid.

-q
--quiet

omite os cabeçalhos (útil para scripts).

-s
--tablespaces

mostra os OIDs dos espaços de tabelas.

-S
--system-objects

inclui objetos do sistema (aqueles nos esquemas information_schema, pg_toast e pg_catalog).

-t tablename_pattern
--table=tablename_pattern

mostra informações para tabelas que correspondem a tablename_pattern.

-V
--version

mostra a versão do oid2name e termina.

-x
--extended

exibe mais informações sobre cada objeto mostrado: nome do espaço de tabelas, nome do esquema e OID.

-?
--help

mostra ajuda sobre os argumentos da linha de comando do oid2name e termina.

O utilitário oid2name também aceita os seguintes argumentos de linha de comando para parâmetros de conexão:

-d database
--dbname=database

banco de dados para conectar.

-h host
--host=host

hospedeiro do servidor de banco de dados.

-H host

hospedeiro do servidor de banco de dados. O uso desse parâmetro está em obsolescência desde o PostgreSQL 12.

-p port
--port=port

porta do servidor de banco de dados.

-U username
--username=username

nome de usuário para conectar como.

Para exibir tabelas específicas, devem ser selecionadas quais tabelas serão mostradas usando as opções -o, -f e/ou -t. A opção -o recebe um OID, -f recebe um filenode, e -t recebe um nome de tabela (na verdade, é um padrão LIKE, então podem ser usadas coisas como foo%). Podem ser usadas quantas opções se desejar, e a listagem irá incluir todos os objetos correspondentes a qualquer uma das opções. Mas deve-se notar que essas opções só podem mostrar objetos no banco de dados especificado por -d.

Se não for fornecida nenhuma opção -o, -f ou -t, mas for fornecido -d, serão listadas todas as tabelas no banco de dados especificado por -d. Nesse modo, as opções -S e -i controlam o que é listado.

Se também não for fornecida a opção -d, será exibida uma lista de OIDs do banco de dados. Como alternativa, pode ser usada a opção -s para obter uma listagem de espaços de tabelas.

Variáveis de ambiente

PGHOST
PGPORT
PGUSER

Parâmetros de conexão padrão.

Esse utilitário, como a maioria dos outros utilitários do PostgreSQL, usa as variáveis de ambiente com suporte pela libpq (veja Variáveis ​​de ambiente).

A variável de ambiente PG_COLOR especifica se devem ser usadas cores nas mensagens de diagnóstico. Os valores possíveis são always, auto e never.

Notas

O utilitário oid2name requer um servidor de banco de dados em execução com catálogos do sistema não corrompidos. Portanto, é de uso limitado para recuperação em situações de corrupção de banco de dados.

Exemplos

$ # afinal, o que existe nesse servidor de banco de dados?
$ 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, vamos dar uma olhada no banco de dados em algum lugar
$ cd $PGDATA/base/17228

$ # obter os 10 principais objetos de banco de dados no
$ # espaço de tabelas padrão, ordenados por tamanho
$ 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

$ # Que arquivo é o 155173?
$ oid2name -d alvherre -f 155173
From database "alvherre":
  Filenode  Table Name
----------------------
    155173    accounts

$ # pode-se perguntar sobre mais de um objeto
$ oid2name -d alvherre -f 155173 -f 1155291
From database "alvherre":
  Filenode     Table Name
-------------------------
    155173       accounts
   1155291  accounts_pkey

$ # pode-se misturar as opções e obter mais detalhes com -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 espaço em disco para cada objeto em um banco de dados
$ 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
...

$ # o mesmo, mas classificado por tamanho
$ 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
...

$ # se for desejado ver o que há nos espaços de tabelas,
$ # deve ser usado o diretório pg_tblspc
$ cd $PGDATA/pg_tblspc
$ oid2name -s
All tablespaces:
     Oid  Tablespace Name
-------------------------
    1663       pg_default
    1664        pg_global
  155151         fastdisk
  155152          bigdisk

$ # quais bancos de dados possuem objetos no espaço de tabela "fastdisk"?
$ ls -d 155151/*
155151/17228/  155151/PG_VERSION

$ # Ah, o que era o banco de dados 17228 mesmo?
$ oid2name
All databases:
    Oid  Database Name  Tablespace
----------------------------------
  17228       alvherre  pg_default
  17255     regression  pg_default
  17227      template0  pg_default
      1      template1  pg_default

$ # Vamos ver quais objetos esse banco de dados possui no espaço de tabelas.
$ cd 155151/17228
$ ls -l
total 0
-rw-------  1 postgres postgres 0 sep 13 23:20 155156

$ # OK, essa é uma tabela bem pequena... mas qual é ela?
$ oid2name -d alvherre -f 155156
From database "alvherre":
  Filenode  Table Name
----------------------
    155156         foo

Autor

B. Palmer



[245] filenode: Um identificador numérico usado para dar nome a arquivos em disco pertencentes a uma relação (N. T.)