Сегодня рассмотрим несколько команд для определения размеров различных сущностей в PostgreSQL.
Перед тем как начать - рассмотрим вспомогательную функцию pg_size_pretty()
, которая:
Преобразует размер в байтах, представленный в 64-битном целом, в понятный человеку формат с единицами измерения
То есть вместо какого-то огромного числа байтов показывает понятную строчку, например:
select pg_size_pretty(100250408::bigint);
-- Вывод:
pg_size_pretty
text
--------------
96 MB
Теперь, вооружившись этой функцией, переходим к основным функциям.
Первое и самое нужное - размер таблицы PostgreSQL без учета индексов и прочих деталей. Для этого есть функция pg_relation_size()
, принимающая в качестве аргумента название таблицы. Комбинируем ее с pg_size_pretty()
и получаем:
select pg_size_pretty(pg_relation_size('my_table'));
-- Вывод (небольшая тестовая таблица в моей БД):
pg_size_pretty
text
--------------
48 kB
Далее - определим сколько места занимают все индексы для таблицы. Для этого есть функция pg_indexes_size()
, также принимающая в качестве аргумента название таблицы:
select pg_size_pretty(pg_indexes_size('my_table'));
-- Вывод (опять же для некоей тестовой таблицы):
pg_size_pretty
text
--------------
88 kB
Функция pg_total_relation_size()
определяет сколько места суммарно занимает таблица, ее индексы и данные TOAST, так что ее результат будет отличаться от суммы результатов двух предыдущих запросов.
Ну и чтобы не складывать на калькуляторе размеры всех таблиц и индексов - размер базы данных PostgreSQL определим с помощью pg_database_size()
:
select pg_size_pretty(pg_indexes_size('my_table'));
-- Вывод (опять же для некоей тестовой базы данных):
pg_size_pretty
text
--------------
8137 kB
Больше информации про описанные функции - здесь: https://postgrespro.ru/docs/postgrespro/12/functions-admin#FUNCTIONS-ADMIN-DBOBJECT