идеале показать сколько места занимают все записи после группироввки. Например есть логи. Можно ли написать селект, который покажет сколько места (не строк а именно mb) на диске занимает каждый день. Count за день не показывает то что нужно.
Подойдет хотя бы приблизительная оценка (например количество страниц занимаемых теми записями которые попали в селект)
А если CREATE TEMPORARY TABLE result AS SELECT ... а потом \dt+ result? А вообще... Вы хоть это место имели в виду? Или то, сколько страниц (записей?) было выбрано запросом из исходных таблиц, или ещё что-то?
У меня есть табличка с логом. В какой то момент логов стало очень много. При этом количество записей за день не изменилось. Условно надо найти сколько за день логи занимают. Что бы найти проблемные дни.
Как посмотреть размер всей таблицы я знаю. Решение в лоб: селект за день писать в файл, потом смотреть размеры файлов. Но табличка несколько Тб) по этому хочется посчитать хотя бы странички занимаемые данными в селекте (надеюсь понятно объяснил проблему?)
длины строки не хватит?
так вам предложили создать временную табличку по вашему запросу с данными за день, а потом посмотреть ее размер
Нет, я так и не понял. :( Одно дело — сколько данных читается, чтобы получить результат запроса, а другое — сколько занимает этот результат. Например, SELECT COUNT(*) FROM t; прочитает всю таблицу (или индекс), т.е. несколько ТБ в Вашем случае, а результате будет несколько байт. Вас что интересует?
Самое наверно близкое правда брать длину строк в ответе и складывать. Спасибо.
Ну да две оценки да Либо create temp table as select Либо sum(pg_column_size(x)) Обе дадут диапазон приблизительный
Какую задачу Вы решаете? Данные могут быть в toast (он сжимается, у него индекс есть), в запросе могут быть lob,... И др и пр
Обсуждают сегодня