Программа oid2name
Выйдите из сеанса psql и в оболочке Bash работайте пользователем postgres.
postgres@ts_db=# \q
[postgres@ServerName ~]$
Получение oid по имени объекта
-
Получите командой
oid2nameсписок БД кластера, ихoidи табличных пространств.[postgres@ServerName ~]$ oid2nameAll databases:Oid Database Name Tablespace----------------------------------16390 koi8_db pg_default5 postgres pg_default16401 py_json_db pg_default16389 student pg_default4 template0 pg_default1 template1 pg_default16432 ts_db ts_lab -
Получите список всех имеющихся табличных пространств кластера.
[postgres@ServerName ~]$ oid2name -sAll tablespaces:Oid Tablespace Name------------------------1663 pg_default1664 pg_global16431 ts_lab -
Определите названия файлов данных таблиц БД
ts_db.[postgres@ServerName ~]$ oid2name -d ts_dbFrom database "ts_db":Filenode Table Name----------------------16433 i_f16436 i_t -
В подробном виде получите данные о таблице
i_tбазы данныхts_db.[postgres@ServerName ~]$ oid2name -d ts_db -t i_t -xFrom database "ts_db":Filenode Table Name Oid Schema Tablespace---------------------------------------------------------16436 i_t 16436 public ts_lab -
Находясь в домашнем каталоге
postgres, командойfindОС найдите файл данных таблицыi_t.[postgres@ServerName ~]$ find ~postgres/ -name 16436/var/lib/postgres/ts_data/PG_15_202310091/16432/16436 -
Убедитесь, что каталог, в котором размещен этот файл, соответствует
oidБДts_db.[postgres@ServerName ~]$ oid2name | grep ts_db16432 ts_db ts_lab
Получение имени объекта по его oid
-
Найдите имя таблицы в БД, если известен ее
oid.[postgres@ServerName ~]$ oid2name -f 16436 -d ts_dbFrom database "ts_db":Filenode Table Name---------------------------16436 i_t -
В каталоге с
oidБДts_dbотфильтруйте все файлы с именами из цифр, отсортируйте полученный список по убыванию, выберите файл данных с максимальнымoidи определите, какой это объект БД.[postgres@ServerName ~]$ oid2name -d ts_db -f $(ls ts_data/PG_15_202310091/16432/ | egrep '^[0-9]+$' | sort -nr | head -1)Разбор команды
ls ts_data/PG_15_202310091/16432/— вывод списка файлов и каталогов в подкаталоге базы данныхts_db(16432— этоoidБД);egrep '^[0-9]+$'— фильтрация списка, оставляющая только имена, состоящие целиком из цифр (файлы данных отношений, так как их имена в PostgreSQL — этоoidобъектов);sort -nr— сортировка полученныхoidв числовом порядке по убыванию (-n— число,-r— reverse);head -1— выбор первого (наибольшего)oidиз отсортированного списка;$(...)— командная подстановка, результат выполнения конвейера передается как аргумент командеoid2name;oid2name -d ts_db -f <oid>— утилита для сопоставления файловой структуры PostgreSQL с объектами базы данных; опция-dуказывает базу данных для анализа,-fзапрашивает информацию о файле с заданнымoid.
From database "ts_db":Filenode Table Name--------------------------------16440 pg_toast_16436_indexЭто индекс для таблицы TOAST, для хранения длинных строк таблицы
i_t.
Самопроверка
Вопрос 1
В оболочке bash выполнена команда:
[postgres@ServerName ~]$ oid2name
All databases:
Oid Database Name Tablespace
----------------------------------
16390 koi8_db pg_default
5 postgres pg_default
16401 py_json_db pg_default
16389 student pg_default
4 template0 pg_default
1 template1 pg_default
16432 ts_db ts_lab
Какой oid имеет база данных ts_db?
Вопрос 2
Что делает опция -s утилиты oid2name?
Вопрос 3
В оболочке bash выполнена команда:
[postgres@ServerName ~]$ oid2name -d ts_db -f $(ls ts_data/PG_15_202310091/16432/ | egrep '^[0-9]+$' | sort -nr | head -1)
From database "ts_db":
Filenode Table Name
--------------------------------
16440 pg_toast_16436_index
Чем является объект pg_toast_16436_index?
Вопрос 4
Какие опции поддерживает утилита oid2name?