Postgres: перевірити простір на диску, зайнятий матеріалізованим видом?


14

Я знаю, як перевірити розмір індексів та таблиць у Postgres (я використовую версію 9.4):

SELECT
   relname AS objectname,
   relkind AS objecttype,
   reltuples AS "#entries", pg_size_pretty(relpages::bigint*8*1024) AS size
   FROM pg_class
   WHERE relpages >= 8
   ORDER BY relpages DESC;

Але це не відображає матеріалізованих поглядів. Як я можу перевірити, скільки місця на диску вони займають?

Відповіді:


23

Це передбачає , що матеріалізовані уявлення були relpages >= 8в pg_class, які не повинні бути. Насправді він може бути порожнім - ще не заселений, позначений символом pg_class.relispopulated = FALSE. У цьому випадку відповідний файл диска має нульовий розмір.

Спробуйте замість цього:

SELECT relname   AS objectname
     , relkind   AS objecttype
     , reltuples AS entries
     , pg_size_pretty(pg_table_size(oid)) AS size  -- depending - see below
FROM   pg_class
WHERE  relkind IN ('r', 'i', 'm')
ORDER  BY pg_table_size(oid) DESC;

Де доступні типи :

r= звичайна таблиця,
i= індекс,
S= послідовність,
v= перегляд,
m= матеріалізований вигляд,
c= складений тип,
t= таблиця TOAST,
f= таблиця іноземної

Використовуйте одну з функцій розміру об'єкта бази даних, а не будуйте власну. Майте на увазі, що "розмір таблиці" можна визначити різними способами. Деталі:


1
Вірна відповідь дійсно. Зауважте, що замовлення за розміром вводить в оману, оскільки ви друкуєте розмір у читаній людиною формі, роблячи упорядкування впорядковано лексикографічно
Джек

@Jack: Добре. Я додав більш розумного ORDER BY.
Ервін Брандштеттер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.