Фактические требования к дисковому пространству столбца для всей таблицы , как правило, трудно определить. Это зависит от ряда факторов.
О PostgreSQL в частности
Одним из таких факторов является выравнивание данных. Я написал больше об этом в связанном ответе .
Еще один - сжатие. Текст, длина которого превышает несколько десятков байт, будет тостом . То есть сжат и хранится в отдельной таблице TOAST.
Индексы увеличивают общее пространство.
Ответить примером
Для этой цели я использую реальную таблицу с 21k мест с именем location
. В нем 20 столбцов, но name
самый большой. Чтобы продемонстрировать накладные расходы, которые несет таблица, я создал временную таблицу с одним столбцом name
в дополнение. (Накладные расходы для временной таблицы в основном такие же, как и для простой таблицы - я проверял.)
CREATE TEMP TABLE x AS SELECT name FROM location;
Затем я использовал некоторые функции PostgreSQL размера объекта базы данных для создания этой демонстрации:
SELECT pg_size_pretty(pg_table_size('loc'::regclass)) AS tbl_size
,pg_size_pretty(pg_relation_size('loc'::regclass)) AS rel_size
,(SELECT pg_size_pretty(sum(pg_column_size(loc))) from loc) AS sum_col_size
,pg_size_pretty(pg_table_size('x'::regclass)) AS tbl_size
,pg_size_pretty(pg_relation_size('x'::regclass)) AS rel_size
,(SELECT pg_size_pretty(sum(pg_column_size(loc))) from x) AS sum_col_size
Результат:
tbl_size | rel_size | sum_col_size | x_tbl_size | x_rel_size | x_sum_col_size
---------+----------+--------------+------------+------------+---------------
3160 kB | 3128 kB | 432 kB | 1104 kB | 1096 kB | 432 kB
Но, может быть, я перевернул вопрос, и вам нужен только объем хранилища для базовых типов данных? Это указано в каждой главе в прекрасном руководстве здесь .