Таблицы TOAST определяются следующим образом:
\d pg_toast.pg_toast_59238
TOAST table "pg_toast.pg_toast_59238"
Column | Type
------------+---------
chunk_id | oid
chunk_seq | integer
chunk_data | bytea
Здесь chunk_id
- это идентификатор отдельного значения в тосте, а chunk_seq
- индекс для частей, на которые было разбито значение в тосте. .
Поскольку существует только около 4 миллиардов различных беззнаковых 4-байтовых целых чисел, и это тип данных oid
, в каждой таблице базы данных может быть только 4 миллиарда данных с тостами.
Однако не каждая запись в таблице подвергается тосту: только когда размер строки таблицы превышает 2000 байтов после сжатия, значения сохраняются вне строки.
Вы можете пополнить таблицу TOAST для своей таблицы:
SELECT reltoastrelid
FROM pg_class
WHERE relname = 'mytable';
Затем вы можете узнать, сколько там записей:
SELECT count(DISTINCT chunk_id)
FROM pg_toast.pg_toast_12345;
Предупреждение: Это дорогостоящий запрос.