Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: TOAST, PostgreSQL, storage, large objects, compression

Что такое TOAST-таблицы?

Вопрос проверяет понимание механизма хранения длинных строк и больших данных в PostgreSQL, что важно для оптимизации производительности базы данных.

Короткий ответ

TOAST (The Oversized-Attribute Storage Technique) — это механизм PostgreSQL для хранения значений, превышающих размер страницы (обычно 8 КБ). Он автоматически сжимает или выносит большие данные в отдельные TOAST-таблицы, чтобы основная таблица оставалась компактной. Это позволяет эффективно работать с полями типа TEXT, BYTEA или большими JSONB.

Длинный ответ

Что такое TOAST-таблицы?

TOAST (The Oversized-Attribute Storage Technique) — это встроенный механизм PostgreSQL для работы с атрибутами, размер которых превышает размер страницы данных (обычно 8 КБ). Когда значение поля (например, TEXT, BYTEA, JSONB) становится слишком большим, PostgreSQL автоматически сжимает его или перемещает в отдельную TOAST-таблицу, связанную с основной. Это позволяет избежать раздувания основной таблицы и сохранить производительность запросов.

Как это работает?

PostgreSQL использует три стратегии хранения для TOAST-атрибутов:

  • PLAIN — предотвращает TOAST (используется для фиксированных типов, например INTEGER).
  • EXTENDED — сначала сжимает, затем выносит в TOAST-таблицу (по умолчанию для TEXT, BYTEA).
  • EXTERNAL — выносит без сжатия (полезно, если данные уже сжаты, например изображения).
  • MAIN — сначала пытается сжать, но не выносит, пока это возможно.

При чтении строки PostgreSQL автоматически подтягивает TOAST-данные, если они нужны. Это прозрачно для разработчика.

Пример

Создадим таблицу с большим текстом:

CREATE TABLE articles (
  id SERIAL PRIMARY KEY,
  content TEXT
);

INSERT INTO articles (content)
SELECT repeat('PostgreSQL TOAST ', 10000);

PostgreSQL автоматически сожмет и сохранит content в TOAST-таблице. Проверить это можно через системную таблицу pg_class:

SELECT relname, reltoastrelid
FROM pg_class
WHERE relname = 'articles';

Если reltoastrelid не равен 0, TOAST-таблица существует.

Вывод

TOAST-таблицы — это незаметный, но критически важный механизм PostgreSQL для эффективного хранения больших данных. Они автоматически оптимизируют использование дискового пространства и ускоряют сканирование таблиц, не требуя ручного вмешательства. Понимание TOAST помогает при проектировании схем и настройке производительности БД.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    5

Навыки

  • Postgres

    Postgres

  • SQL

Ключевые слова

#TOAST

#PostgreSQL

#storage

#large objects

#compression

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.