The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Как посмотреть размер баз и таблиц в PostgreSQL
Для сопоставления OID номеров и имен баз и таблиц в contrib есть утилита oid2name.

Для просмотра размера таблиц для текущей базы:
   SELECT relname AS name, relfilenode AS oid, (relpages * 8192 / (1024*1024))::int as size_mb, reltuples  as count 
      FROM pg_class 
      WHERE relname NOT LIKE 'pg%' 
      ORDER BY relpages DESC;

Для просмотра общего размера баз можно использовать скрипт:
   #!/bin/sh
   oid2name=/usr/local/pgsql/bin/oid2name
   pg_data_path=/usr/local/pgsql/data/base

   {
      $oid2name| grep '='| while read oid delim name; do
          size=`du -s $pg_data_path/$oid|cut -f1`
          echo "$size $name"
      done
   }|sort -rn

Другой вариант просмотра размера базы:
select pg_database_size('имя базы');

Размер таблицы: 
select select pg_relation_size('имя таблицы');

Полный размер таблицы с сопутствующих индексов.
select pg_total_relation_size('имя таблицы');

Размер столбцов
select pg_column_size('имя стобца') from 'имя таблицы'; 

Состояние всех настроек можно посмотреть через функцию pg_show_all_settings().
 
09.06.2005
Ключи: postgresql, size, database / Лицензия: CC-BY
Раздел:    Корень / Программисту и web-разработчику / SQL и базы данных / PostgreSQL специфика / Оптимизация и администрирование PostgreSQL

Обсуждение [ RSS ]
 
  • 1, Den, 15:07, 05/04/2006 [ответить] [смотреть все]
  • +/
    Вот это:
    (relpages * 8192 / (1024*1024))

    АБСОЛЮТНО!!! неправильно, хотя везде это пример упоминают. Дело в том, что при достаточно большом размере (порядка нескольких гигабайт) происходит переполнение и в результате получается полная чушь.

    Арифметику учили?
    * 8192 / (1024*1024) == / 128

    Итого:

    SELECT relname AS name, relfilenode AS oid, (relpages / 128) as size_mb, reltuples  as count FROM pg_class WHERE relname NOT LIKE 'pg%' ORDER BY relpages DESC;

     
  • 2, cubite, 23:02, 14/03/2007 [ответить] [смотреть все]
  • +/
    select pg_size_pretty(pg_database_size('database_name'));
    select pg_size_pretty(pg_relation_size('table_name'));
     
  • 3, Константин, 22:06, 06/06/2009 [ответить] [смотреть все]
  • +/
    Условие "WHERE relname NOT LIKE 'pg%'" нужно убрать, т.к. вы не увидите toast-таблиц, где распологаются, например, text-поля пользовательских таблиц, которые соответственно не попадают в размер самой таблицы.
     
  • 4, AlexGor, 10:50, 19/10/2009 [ответить] [смотреть все]
  • +/
    -- размер таблиц:
    SELECT
    schemaname||'.'||tablename AS full_tname,
    pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) AS total_usage,
    pg_size_pretty((pg_total_relation_size(schemaname||'.'||tablename) - pg_relation_size(schemaname||'.'||tablename))) AS external_table_usage
    FROM pg_catalog.pg_tables
    ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;

    -- размер базы:
    SELECT pg_size_pretty(SUM(pg_total_relation_size(schemaname||'.'||tablename))::bigint) AS grand_total
    FROM pg_catalog.pg_tables

     
  • 5, Тимофей, 14:16, 23/01/2017 [ответить] [смотреть все]
  • +/
    Знатоки, подскажите пожалуйста.
    Есть таблица:
    № записи - ИД компании - Информация
    Как посчитать объем дискового пространства, занимаемого информацией определенной компании?
    Спасибо.
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:



      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor