50.30. pg_largeobject
В каталоге pg_largeobject
содержатся данные, образующие «большие объекты». Большой объект идентифицируется по OID, назначаемому при его создании. Каждый большой объект разделяется на сегменты или «страницы», достаточно небольшие для удобного размещения в строках таблицы pg_largeobject
. Объём данных на странице определяется как LOBLKSIZE
(что в настоящее время составляет BLCKSZ/4
, то есть обычно 2 Кб).
До PostgreSQL 9.0 большие объекты не были связаны с механизмом разрешений. В результате таблица pg_largeobject
была доступна на чтение для всех и через неё можно было получить OID (и содержимое) всех больших объектов в системе. Теперь это не так; для получения списка OID больших объектов нужно обратиться к pg_largeobject_metadata
.
Таблица 50.30. Столбцы pg_largeobject
Name | Тип | Ссылки | Описание |
---|---|---|---|
loid | oid |
| Идентификатор большого объекта, включающего эту страницу |
pageno | int4 | Номер этой страницы в большом объекте (начиная с нуля) | |
data | bytea | Собственно данные, хранящиеся в большом объекте. Их объём не может превышать LOBLKSIZE , но может быть меньше. |
В каждой строке pg_largeobject
содержатся данные для одной строки большого объекта, начиная со смещения (pageno * LOBLKSIZE
) внутри него (в байтах). Эта реализация допускает разреженное хранилище: страницы могут отсутствовать и могут быть короче LOBLKSIZE
, даже если это не последние страницы объектов. Пропущенные области в большом объекте будут считываться как нулевые.