6
TOAST
Версия строки должна помещаться на одну страницу
можно сжать часть полей
можно вынести часть полей в отдельную toast-таблицу
можно сжать и вынести одновременно
Toast-таблица
находится в схеме pg_toast (pg_toast_temp_N)
поддержана собственным индексом
содержит фрагменты «длинных» значений размером меньше страницы
читается только при обращении к «длинному» полю
имеет собственную версионность
используется прозрачно для приложения
Любая версия строки в PostgreSQL должна целиком помещаться на
одну страницу. Для «длинных» версий строк применяется технология
TOAST — The Oversized Attributes Storage Technique. Она
подразумевает несколько стратегий работы с «длинными» полями.
Значение поля может быть сжато так, чтобы версия строки поместилась
на страницу. Значение может быть убрано из версии и перемещено
в отдельную служебную таблицу. Могут применяться и оба подхода:
какие-то значения будут сжаты, какие-то — перемещены, какие-то —
сжаты и перемещены одновременно.
Для каждой основной таблицы при необходимости создается отдельная
toast-таблица (и к ней специальный индекс). Такие таблицы и индексы
располагаются в отдельной схеме pg_toast и поэтому обычно не видны
(для временных таблиц используется схема pg_toast_temp_N
аналогично обычной pg_temp_N).
Версии строк в toast-таблице тоже должны помещаться на одну
страницу, поэтому длинные значения хранятся порезанными на
фрагменты. Из этих фрагментов PostgreSQL прозрачно для
приложения «склеивает» необходимое значение.
Toast-таблица используется только при обращении к длинному
значению. Кроме того, для toast-таблицы поддерживается своя
версионность: если обновление данных не затрагивает «длинное»
значение, новая версия строки будет ссылаться на то же самое
значение в toast-таблице — это экономит место.