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-05-1-page-anatomy

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

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

Прочитай сырую страницу таблицы и назови её зоны - не из учебника, а из вывода pageinspect. Перед каждым шагом предсказывай: сколько будет указателей, чему равен lower.

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

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

запустить sandbox →

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

Шаги

  1. 01

    Подключи линзу pageinspect

    Расширение pageinspect даёт функции для чтения сырых страниц.

    sql
    CREATE EXTENSION IF NOT EXISTS pageinspect;

    ✓ Линза установлена - можно вскрывать страницы.

  2. 02

    Сколько строк на странице 0

    Предскажи число строк на странице 0 таблицы flights, потом проверь.

    sql
    SELECT count(*) FROM heap_page_items(get_raw_page('flights', 0));
    подсказка

    Таблица flights небольшая и помещается в одну страницу.

    ✓ 50 строк - значит, 50 указателей в начале страницы.

  3. 03

    Предскажи lower

    Заголовок занимает 24 байта, дальше по 4 байта на указатель. Посчитай lower = 24 + 50 × 4 и сверь.

    sql
    SELECT lower, upper, special FROM page_header(get_raw_page('flights', 0));
    подсказка

    lower - смещение конца массива указателей.

    ✓ lower = 224 = 24 + 50 × 4. Указатели заняли ровно столько.

  4. 04

    Спецзона у heap пуста

    У heap-страницы спецзона в конце пустая, поэтому special совпадает с размером страницы. Проверь.

    sql
    SELECT special, pagesize FROM page_header(get_raw_page('flights', 0));

    ✓ special = 8192 = размер страницы: спецзона пуста.

  5. 05

    Кортежи заполняют страницу с конца

    Указатели нумеруются по возрастанию, а их смещения lp_off убывают: кортежи кладутся с конца страницы вверх. Проверь, что у первого указателя смещение больше, чем у второго.

    sql
    SELECT lp, lp_off, lp_len
    FROM heap_page_items(get_raw_page('flights', 0)) ORDER BY lp LIMIT 5;

    ✓ lp_off убывает - кортежи растут от конца страницы вверх.

Что ты узнал

Страница heap - это заголовок (24 байта), массив указателей, свободное место и кортежи. lower = 24 + число_строк × 4, special равен pagesize у heap, а кортежи заполняют страницу с конца (lp_off убывает).

команды

  • CREATE EXTENSION pageinspect;включить линзы страниц
  • SELECT * FROM page_header(get_raw_page('t',0));заголовок страницы
  • SELECT * FROM heap_page_items(get_raw_page('t',0));указатели и кортежи страницы

концепции

  • · 8 КБ - фиксированный размер страницы и единица обмена
  • · lower - конец указателей, upper - начало кортежей
  • · указатели растут вниз, кортежи - вверх, навстречу друг другу

← предыдущая

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

следующая →

Декодируй заголовок строки и цепочку версий

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