oid2name

oid2name — разрешить OID и номера файловых узлов в каталоге данных QHB

Синтаксис

oid2name [параметр...]

Описание

oid2name — это программа-утилита, помогающая администраторам изучать файловую структуру QHB. Чтобы использовать ее, необходимо понимать файловую структуру базы данных, описанную в главе Физическое хранилище базы данных.

Примечание
Название «oid2name» является историческим и на самом деле вводит в заблуждение, поскольку при ее использовании вы по большей части будете иметь дело с номерами файловых узлов таблиц (которые представляют собой имена файлов, видимые в каталогах баз данных). Необходимо точно понимать разницу между OID таблиц и номерами файловых узлов таблиц!

Программа oid2name подключается к целевой базе данных и извлекает информацию об OID, номерах файловых узлов и/или именах таблиц. С ее помощью можно также просмотреть OID базы данных или табличного пространства.

Параметры

oid2name принимает следующие аргументы командной строки:

-f файловый_узел
--filenode=файловый_узел
Показать информацию о таблице, к которой относится файловый_узел.

-i
--indexes
Включить в распечатку индексы и последовательности.

-o oid
--oid=oid
Показать информацию о таблице с OID, равным oid.

-q
--quiet
Не выводить заголовки (полезно для скриптов).

-s
--tablespaces
Показать OID табличных пространств.

-S
--system-objects
Включить в распечатку системные объекты (те, что находятся в схемах information_schema, pg_toast и pg_catalog).

-t шаблон_имен_таблиц
--table=шаблон_имен_таблиц
Показать информацию о таблицах, соответствующих шаблону_имен_таблиц.

-V
--version
Вывести версию oid2name и завершиться.

-x
--extended
Отобразить более подробную информацию о каждом показываемом объекте: имя табличного пространства, имя схемы и OID.

-?
--help
Показать справку об аргументах командной строки oid2name и завершиться.

Кроме того, в качестве параметров подключения oid2name принимает следующие аргументы командной строки:

-d база_данных
--dbname=база_данных
База данных для подключения.

-h хост
--host=хост
Имя хост-компьютера, на котором работает сервер баз данных.

-H хост
Имя хост-компьютера, на котором работает сервер баз данных. Этот параметр считается устаревшим.

-p порт
--port=порт
Порт сервера базы данных.

-U имя_пользователя
--username=имя_пользователя
Имя пользователя, под которым производится подключение.

Для отображения информации об определенных таблицах выберите их с аргументом -o, -f и/или -t. Параметр -o принимает OID, -f — файловый узел, а -t — имя таблицы (на самом деле это шаблон LIKE, поэтому в нем можно задать что-то вроде foo%). Эти аргументы можно использовать в любом количестве; в распечатку будут включены все объекты, соответствующие любым из этих указаний. Но учтите, что эти параметры будут выбирать только объекты в базе данных, заданной ключом -d.

Если вы не задали -o, -f или -t, но передали -d, будут перечислены все таблицы в базе данных с именем, заданным в -d. В этом режиме набором выводимых сведений управляют параметры -S и -i.

Если вы не задали и аргумент -d, будет показан список OID баз данных. Как вариант, можно передать аргумент -s, чтобы получить список табличных пространств.

Переменные среды

PGHOST
PGPORT
PGUSER
Параметры подключения по умолчанию.

Переменная среды PG_COLOR указывает, использовать ли цвет в диагностических сообщениях. Возможные значения: always (всегда), auto (автоматически) и never (никогда).

Примечания

Программе oid2name требуется работающий сервер с исправными системными каталогами. Таким образом, в ситуациях восстановления после катастрофического повреждения базы данных ее использование ограничено.

Примеры

$ # Что вообще есть на этом сервере базы данных?
$ 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

$ # Ладно, давайте взглянем на базу данных alvherre
$ cd $PGDATA/base/17228

$ # Получим первые 10 объектов БД (отсортированных по размеру) в табличном пространстве по умолчанию
$ 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

$ # Поинтересуемся, что за файл 155173...
$ oid2name -d alvherre -f 155173
From database "alvherre":
  Filenode  Table Name
----------------------
    155173    accounts

$ # Можно запросить информацию о нескольких объектах
$ oid2name -d alvherre -f 155173 -f 1155291
From database "alvherre":
  Filenode     Table Name
-------------------------
    155173       accounts
   1155291  accounts_pkey

$ # Можно добавить другие параметры и получить более подробную информацию с -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

$ # Показать объем, который занимает на диске каждый объект БД
$ 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
...

$ # То же самое, но отсортированное по размеру
$ 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
...

$ # Если хотите просмотреть содержимое табличных пространств, воспользуйтесь каталогом pg_tblspc
$ cd $PGDATA/pg_tblspc
$ oid2name -s
All tablespaces:
     Oid  Tablespace Name
-------------------------
    1663       pg_default
    1664        pg_global
  155151         fastdisk
  155152          bigdisk

$ # Объекты каких баз данных находятся в табличном пространстве «fastdisk»?
$ ls -d 155151/*
155151/17228/  155151/PG_VERSION

$ # И что это еще за база данных 17228?
$ oid2name
All databases:
    Oid  Database Name  Tablespace
----------------------------------
  17228       alvherre  pg_default
  17255     regression  pg_default
  17227      template0  pg_default
      1      template1  pg_default

$ # Давайте посмотрим, какие объекты этой базы данных находятся в этом табличном пространстве.
$ cd 155151/17228
$ ls -l
total 0
-rw-------  1 postgres postgres 0 sep 13 23:20 155156

$ # Ладно, это довольно маленькая таблица... и что это за таблица?
$ oid2name -d alvherre -f 155156
From database "alvherre":
  Filenode  Table Name
----------------------
    155156         foo

Автор

Б. Палмер (bpalmer@crimelabs.net)