Перейти к основному содержимому

oid2name. Преобразование в имена OID и номера файловых узлов в каталоге данных

В исходном дистрибутиве установлено по умолчанию: да.

Связанные компоненты: отсутствуют.

Схема размещения: не используется.

oid2name – вспомогательная программа для исследования структуры файлов PostgreSQL.

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

Важно!

OID таблиц отличаются от номеров файловых узлов.

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

Параметры приложения

Аргументы командной строкиОписание
-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=шаблон_имен_таблиц
Показать информацию о таблицах, соответствующих шаблону шаблон_имен_таблиц; аргумент принимает шаблон LIKE, то есть можно задать его значение по примеру foo%
-V
--version
Вывести версию приложения oid2name и завершить работу
-x
--extended
Вывести дополнительные сведения о каждом объекте:
– имя табличного пространства;
– имя схемы;
– OID
-?
--help
Вывести справку об аргументах командной строки приложения oid2name и завершить работу
-d база_данных
--dbname=база_данных
Параметр подключения: имя целевой базы данных
-h сервер
--host=сервер
Параметр подключения: адрес сервера баз данных
-p порт
--port=порт
Параметр подключения: порт сервера баз данных
-U имя_пользователя
--username=имя_пользователя
Параметр подключения: имя пользователя
-H серверУстаревший параметр подключения: адрес сервера баз данных

Примечание:

Допускается использовать аргументы -o, -f и -t в любом количестве; в вывод будут включены все объекты, соответствующие любым из этих указаний. Указанные аргументы будут выбирать объекты в базе данных, заданной ключом -d.

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

В случае, если отсутствует аргумент -d, то выводится список OID баз данных.

Переменные окружения

Параметры подключения по умолчанию:

  • PGHOST;
  • PGPORT;
  • PGUSER.

Программа oid2name использует переменные среды, поддерживаемые libpq.

Доработка

Доработка не проводилась.

Ограничения

Ограничения отсутствуют.

Установка

Установка не требуется.

Исполняемый файл oid2name расположен в каталоге $PGHOME/bin/.

Настройка

Настройка не требуется.

Использование модуля

Пример использования приложения:

  1. Запустите приложение oid2name для вывода общего списка баз данных, которые существуют на этом сервере:

    oid2name

    Пример вывода результата:

    All databases:
    Oid Database Name Tablespace
    ----------------------------------
    16399 first_db tbl_t
    14198 postgres pg_default
    14197 template0 pg_default
    1 template1 pg_default
    18488 test_pgfdw pg_default
    18517 tstrefint pg_default

    Запустите приложение oid2name с ключом -s для вывода списка OID табличных пространств:

    oid2name -s

    Пример вывода результата:

    All tablespaces:
    Oid Tablespace Name
    ------------------------
    1663 pg_default
    1664 pg_global
    16398 tbl_t
  2. Получите первые 10 отсортированных по размеру объектов базы tstrefint в табличном пространстве по умолчанию pg_default:

    ls -lS $PGDATA/base/18517 | head -10

    Пример вывода результата:

    total 15984
    -rw------- 1 tstrefint tstrefint 5218304 Mar 21 06:44 18656
    -rw------- 1 tstrefint tstrefint 1081344 Mar 22 13:42 1255
    -rw------- 1 tstrefint tstrefint 761856 Mar 22 14:12 1249
    -rw------- 1 tstrefint tstrefint 696320 Mar 17 20:42 3456
    -rw------- 1 tstrefint tstrefint 557056 Mar 22 13:43 2838
    -rw------- 1 tstrefint tstrefint 540672 Mar 22 13:42 2608
    -rw------- 1 tstrefint tstrefint 434176 Mar 22 13:43 9987
    -rw------- 1 tstrefint tstrefint 417792 Mar 22 13:42 2674
    -rw------- 1 tstrefint tstrefint 344064 Mar 22 13:42 2609
  3. Проверьте файл 18656:

    oid2name -d tstrefint -f 18656

    Пример вывода результата:

    From database "tstrefint":
    Filenode Table Name
    ----------------------
    18656 test_pre
  4. Проверьте файлы 1255 и 1249:

    oid2name -d tstrefint -f 1255 -f 1249

    Пример вывода результата:

    From database "tstrefint":
    Filenode Table Name
    ------------------------
    1249 pg_attribute
    1255 pg_proc
  5. Добавьте параметры и получите дополнительные подробности, применив ключ -x:

    oid2name -d tstrefint -t test_pre -f 18656 -x

    Пример вывода результата:

    From database "tstrefint":
    Filenode Table Name Oid Schema Tablespace
    -------------------------------------------------
    18656 test_pre 18656 ext pg_default
  6. Вычислите объем, который занимает на диске каждый объект базы данных:

    du [0-9]* | sort -rn |
    while read SIZE FILENODE
    do
    echo "$SIZE `oid2name -q -d tstrefint -i -f $FILENODE`"
    done

    Пример вывода результата:

    8            18646  pg_toast_18641_index
    8 18641 tcndata
    8 18552 a
    8 18541 c
    8 18537 b
    8 18532 ci
    8 18528 bi
    8 18524 ai
    8 175 pg_user_mapping_user_server_index
    8 174 pg_user_mapping_oid_index
    8 16780 hints_norm_and_app
    8 16778 hints_pkey
    8 16777 pg_toast_16771_index
    8 16769 hints_id_seq
    8 16723 outlines_pkey
    8 16722 pg_toast_16717_index
    8 14067 pg_toast_14063_index
  7. Просмотрите содержимое табличных пространств в каталоге $PGDATA/pg_tblspc:

    oid2name -s

    Пример вывода результата:

    All tablespaces:
    Oid Tablespace Name
    ------------------------
    1663 pg_default
    1664 pg_global
    16398 tbl_t
  8. Выясните, к каким базам данных относятся объекты в табличном пространстве tbl_t:

    ls -d $PGDATA/pg_tblspc/16398/*

    Пример вывода результата:

    /pgdata/0{major_version}/data/pg_tblspc/16398/PG_13_202206301/16399
  9. Выясните, к какой базе данных относится OID 16399:

    oid2name

    Пример вывода результата:

    All databases:
    Oid Database Name Tablespace
    ----------------------------------
    16399 first_db tbl_t
    14198 postgres pg_default
    14197 template0 pg_default
    1 template1 pg_default
    18488 test_pgfdw pg_default
    18517 tstrefint pg_default
  10. Проверьте объекты базы данных, которые содержатся в табличном пространстве tbl_t:

    cd /pgdata/0{major_version}/data/pg_tblspc/16398/PG_13_202206301/16399
    ls -l

    Пример вывода результата:

    -rw------- 1 postgres postgres   81920 Mar 15 13:06 17051
    -rw------- 1 postgres postgres 24576 Mar 13 10:25 17051_fsm
    -rw------- 1 postgres postgres 16384 Mar 15 13:06 17054
    -rw------- 1 postgres postgres 16384 Mar 15 13:06 17056
    -rw------- 1 postgres postgres 3915776 Mar 15 13:06 17068
    -rw------- 1 postgres postgres 24576 Mar 15 13:06 17068_fsm
    -rw------- 1 postgres postgres 8192 Mar 15 08:22 17068_vm
  11. Проверьте таблицу в файле 17068:

    oid2name -d first_db -f 17068

    Пример вывода результата:

    From database "first_db":
    Filenode Table Name
    ------------------------------
    17068 sample_stat_tables

Ссылки на документацию разработчика

Дополнительно поставляемый модуль oid2name: https://www.postgresql.org/docs/current/oid2name.html.