В дальнейшем я использую таблицу pg_type
и ее столбец typname
для демонстрационных целей.Замените их именем таблицы и столбца, чтобы получить ответ по вашему делу (вы не сказали, какой столбец вас интересует).
Вы можете использовать функцию pg_column_size
, чтобы получить размер any
column:
SELECT pg_column_size(histogram_bounds)
FROM pg_stats
WHERE schemaname = 'pg_catalog'
AND tablename = 'pg_type'
AND attname = 'typname';
pg_column_size
----------------
1269
(1 row)
Чтобы преобразовать anyarray
в обычный массив, вы можете сначала привести его к text
, а затем к нужному типу массива:
SELECT histogram_bounds::text::name[] FROM pg_stats ...
ЕслиВы измеряете размер этого преобразованного массива, и вы заметите, что он намного больше, чем результат выше.
Причина в том, что pg_column_size
измеряет фактический размер на диске, а histogram_bounds
достаточно большойхранится вне строки в таблице TOAST, где он будет сжат.Преобразованный массив не сжимается, поскольку он не сохраняется в таблице.