6
TOAST
Хранение «длинных» атрибутов в отдельной таблице
применяется для типов переменной длины: text, bytea, xml, json и др.
«длинные» атрибуты нарезаются на фрагменты меньше страницы
возможно сжатие
размер значения до 1 Гбайта
TOAST-таблица
читается только при обращении к «длинному» атрибуту
возможна частичная декомпрессия значения при чтении
собственная версионность
работает прозрачно для приложения
Любая версия строки в PostgreSQL должна целиком помещаться на
одну страницу. Для «длинных» версий строк применяется технология
TOAST — The Oversized Attributes Storage Technique. Точнее TOAST
применяется к отдельным атрибутам, имеющим тип переменной длины,
например, text и bytea, а также xml и json, которые будут рассмотрены
позже в этом курсе. В любом случае размер одного значения (возможно
сжатого) не должен превышать 1 Гбайта.
Для каждой основной таблицы при необходимости создается отдельная
TOAST-таблица (и к ней специальный индекс). Версии строк в TOAST-
таблице тоже должны помещаться на одну страницу, поэтому
«длинные» значения хранятся порезанными на части, обычно около
2 Кбайт. Из этих частей PostgreSQL прозрачно для приложения
«склеивает» необходимое значение.
TOAST-таблица используется только при обращении к «длинному»
значению. Если требуется прочитать начальную часть сжатого значения
(например функцией substr), то после считывания и склеивания полного
значения будет распакована только первая часть, достаточная для
выдачи результата. А в версии 13 начальные фрагменты будут
считываться порциями и сразу распаковываться, позволяя избежать
считывания «длинного» значения целиком. Но если требуется изменить
несколько байт значения, то оно будет считано и записано полностью.
Для TOAST-таблицы поддерживается своя версионность: если
обновление данных не затрагивает «длинное» значение, новая версия
строки будет ссылаться на то же самое значение в TOAST-таблице —
это экономит место.