linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Главы
  • How it worksскоро
  • Уроки
  • База знаний
  • Собеседование
home/postgres/lessons/pg-lab-04-1-find-table-file

lesson ── postgres-labs ── ~22 мин ── 6 шагов

Найди файл таблицы и понаблюдай форки

Пройди путь от имени таблицы до её файлов и понаблюдай, как форки появляются, а relfilenode меняется. Перед каждым шагом предсказывай: нулевой ли размер форка, совпадут ли OID и relfilenode.

▶ интерактивный sandbox

Поднимется контейнер postgreslab/postgres-base с PostgreSQL 17 и psql. В браузере откроется терминал, база lab уже настроена. Каждый шаг проверяется автоматически. Сеть air-gapped, наружу контейнер не ходит.

запустить sandbox →

stack ── PostgreSQL 17 · psql · 1 GB RAM · air-gapped · самоуничтожается через 45 мин простоя

Шаги

  1. 01

    Путь к файлу таблицы

    Найди файл таблицы flights и разбери путь на OID базы и relfilenode.

    sql
    SELECT pg_relation_filepath('flights');

    ✓ Путь base/<oid>/<relfilenode> найден.

  2. 02

    Создай таблицу с данными

    Создай таблицу и наполни её, чтобы было что вакуумить.

    sql
    CREATE TABLE forklab (id int, note text);
    INSERT INTO forklab SELECT g, 'row'||g FROM generate_series(1, 300) g;

    ✓ 300 строк на месте.

  3. 03

    Карта видимости до очистки

    Предскажи размер форка _vm до первого VACUUM. Карту видимости заполняет именно VACUUM, поэтому сейчас её может ещё не быть.

    sql
    SELECT pg_relation_size('forklab', 'vm');
    подсказка

    Форк появляется лениво. Нет файла - размер 0.

    ✓ Карты видимости пока нет - её размер 0.

  4. 04

    OID против relfilenode

    Сравни внутренний идентификатор и имя файла. Сейчас они равны.

    sql
    SELECT oid, relfilenode, oid = relfilenode AS same
    FROM pg_class WHERE relname = 'forklab';

    ✓ Пока OID и relfilenode совпадают.

  5. 05

    VACUUM создаёт карту видимости

    Выполни вакуум и снова посмотри размер _vm. Предскажи: станет ли он ненулевым?

    sql
    VACUUM forklab;
    SELECT pg_relation_size('forklab', 'vm');

    ✓ После VACUUM форк _vm появился - его размер больше 0.

  6. 06

    VACUUM FULL меняет relfilenode

    Перепиши таблицу целиком и снова сравни OID с relfilenode. Объясни, почему OID тот же, а relfilenode другой.

    sql
    VACUUM FULL forklab;
    SELECT oid, relfilenode, oid = relfilenode AS same
    FROM pg_class WHERE relname = 'forklab';
    подсказка

    VACUUM FULL переписывает таблицу в новый файл - имя файла меняется, идентификатор нет.

    ✓ relfilenode сменился, OID прежний - таблицу переписали в новый файл.

Что ты узнал

Таблица - это набор форков: главный, _fsm, _vm. Карту видимости _vm заполняет VACUUM, поэтому до него её размер 0. relfilenode - имя файла, меняется при перезаписи (VACUUM FULL), а OID остаётся постоянным.

команды

  • SELECT pg_relation_filepath('t');путь к главному форку
  • SELECT pg_relation_size('t','vm');размер карты видимости
  • SELECT oid, relfilenode FROM pg_class WHERE relname='t';идентификатор против имени файла

концепции

  • · форки появляются лениво: _vm заполняет VACUUM
  • · OID постоянен, relfilenode меняется при перезаписи таблицы
  • · VACUUM FULL переписывает таблицу в новый файл

← предыдущая

Пройди иерархию: кластер, базы, схемы

следующая →

Вскрой страницу heap инструментом pageinspect

Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки