oid2name#
oid2name
oid2name — утилита для работы с OIDs и файловыми узлами в каталоге данных Tantor BE
Синтаксис
oid2name
[option
...]
Описание
oid2name - это утилита, которая помогает администраторам изучать структуру файлов, используемых PostgreSQL. Чтобы воспользоваться ею, необходимо быть знакомым со структурой файлов базы данных, которая описана в Глава 70.
Примечание
Имя “oid2name” является историческим и на самом деле вводит в заблуждение, поскольку в большинстве случаев, когда мы используем OID, нам нужны номера файловых узлов таблиц (которые являются именами файлов, видимыми в каталогах базы данных). Убедитесь, что вы понимаете разницу между идентификаторами таблиц и файловыми узлами таблиц!
oid2name подключается к целевой базе данных и извлекает информацию об OID, файловом узле и/или имени таблицы. Также можно показать OID базы данных или OID таблицы.
Опции
oid2name принимает следующие аргументы командной строки:
-f
filenode
--filenode=
filenode
Отобразить информацию для таблицы с файловым узлом
filenode
.-i
--indexes
Включить индексы и последовательности в списке.
-o
oid
--oid=
oid
Отобразить информацию для таблицы с OID
oid
.-q
--quiet
Опустить заголовки (полезно для скриптов).
-s
--tablespaces
Показать идентификаторы табличного пространства имен.
-S
--system-objects
Включить системные объекты (те, которые находятся в схемах
information_schema
,pg_toast
иpg_catalog
).-t
tablename_pattern
--table=
tablename_pattern
Отобразить информацию для таблиц(ы), соответствующих
tablename_pattern
.-V
--version
Вывести версию приложения oid2name и завершить работу.
-x
--extended
Отобразить дополнительную информацию о каждом показанном объекте: имя табличного пространства, имя схемы и OID.
-?
--help
Показать справку о командной строке для приложения oid2name и выйти.
oid2name также принимает следующие аргументы командной строки для параметров подключения:
-d
database
--dbname=
database
база данных для подключения.
-h
host
--host=
host
хост сервера базы данных.
-H
host
хост сервера базы данных. Использование этого параметра не рекомендуется начиная с PostgreSQL 12.
-p
port
--port=
port
порт сервера базы данных.
-U
username
--username=
username
имя пользователя для подключения.
Для отображения конкретных таблиц выберите, какие таблицы показывать, используя -o
, -f
и/или -t
.
-o
принимает OID,
-f
принимает filenode,
а -t
принимает имя таблицы (на самом деле это шаблон LIKE
,
поэтому вы можете использовать такие вещи, как foo%
).
Вы можете использовать столько
из этих опций, сколько вам нужно, и список будет включать все объекты,
соответствующие любой из опций. Но обратите внимание, что эти опции могут
показывать только объекты в базе данных, указанной с помощью -d
.
Если вы не указываете ни одну из опций -o
, -f
или -t
,
но указываете опцию -d
, то будут перечислены все таблицы в базе данных,
указанной опцией -d
. В этом режиме опции -S
и
-i
управляют тем, что будет перечислено.
Если вы не указываете -d
, будет показан список идентификаторов баз данных. В качестве альтернативы, вы можете указать -s
, чтобы получить список табличных пространств.
Окружение
PGHOST
PGPORT
PGUSER
Параметры подключения по умолчанию.
Эта утилита, как и большинство других утилит Tantor BE, также использует переменные среды, поддерживаемые libpq (см. Раздел 31.15).
Переменная среды PG_COLOR
определяет, следует ли использовать цвет в диагностических сообщениях. Возможные значения: always
, auto
и never
.
Примечания
Для использования oid2name требуется работающий сервер базы данных с неиспорченными системными каталогами. Поэтому утилита имеет ограниченное применение при восстановлении серьезно поврежденных баз данных.
Примеры
$ # what's in this database server, anyway? $ 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, let's look into database alvherre $ cd $PGDATA/base/17228 $ # get top 10 db objects in the default tablespace, ordered by size $ 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 $ # I wonder what file 155173 is ... $ oid2name -d alvherre -f 155173 From database "alvherre": Filenode Table Name ---------------------- 155173 accounts $ # you can ask for more than one object $ oid2name -d alvherre -f 155173 -f 1155291 From database "alvherre": Filenode Table Name ------------------------- 155173 accounts 1155291 accounts_pkey $ # you can mix the options, and get more details with -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 $ # show disk space for every db object $ 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 ... $ # same, but sort by size $ 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 ... $ # If you want to see what's in tablespaces, use the pg_tblspc directory $ cd $PGDATA/pg_tblspc $ oid2name -s All tablespaces: Oid Tablespace Name ------------------------- 1663 pg_default 1664 pg_global 155151 fastdisk 155152 bigdisk $ # what databases have objects in tablespace "fastdisk"? $ ls -d 155151/* 155151/17228/ 155151/PG_VERSION $ # Oh, what was database 17228 again? $ oid2name All databases: Oid Database Name Tablespace ---------------------------------- 17228 alvherre pg_default 17255 regression pg_default 17227 template0 pg_default 1 template1 pg_default $ # Let's see what objects does this database have in the tablespace. $ cd 155151/17228 $ ls -l total 0 -rw------- 1 postgres postgres 0 sep 13 23:20 155156 $ # OK, this is a pretty small table ... but which one is it? $ oid2name -d alvherre -f 155156 From database "alvherre": Filenode Table Name ---------------------- 155156 foo
Автор
B. Palmer <bpalmer@crimelabs.net>