The OpenNET Project / Index page

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

Как посмотреть размер баз и таблиц в 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.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;

     
  • 1.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'));
     
  • 1.3, Константин (??), 22:06, 06/06/2009 [ответить]  
  • +/
    Условие "WHERE relname NOT LIKE 'pg%'" нужно убрать, т.к. вы не увидите toast-таблиц, где распологаются, например, text-поля пользовательских таблиц, которые соответственно не попадают в размер самой таблицы.
     
  • 1.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

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

    Спустя 15 лет, в Centos и от root-а работает это

    #!/bin/sh
    oid2name="sudo -u postgres /usr/pgsql-10/bin/oid2name -q"
    pg_data_path="/var/lib/pgsql/10/data/base"

    {
       $oid2name| while read oid name space; do
           size='du -sh $pg_data_path/$oid|cut -f1'
           echo "$size $name"
       done
    }|sort -rh| column -t

     

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




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру