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
Параметры подключения по умолчанию.
Эта утилита, как и большинство других утилит QHB, также использует переменные среды, поддерживаемые libpq (см. раздел Переменные среды).
Переменная среды 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
Автор
Б. Палмер (B. Palmer), bpalmer@crimelabs.net