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.