Для сопоставления 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
URL:
Обсуждается: http://www.opennet.dev/tips/info/917.shtml
Вот это:
(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;
select pg_size_pretty(pg_database_size('database_name'));
select pg_size_pretty(pg_relation_size('table_name'));
Условие "WHERE relname NOT LIKE 'pg%'" нужно убрать, т.к. вы не увидите toast-таблиц, где распологаются, например, text-поля пользовательских таблиц, которые соответственно не попадают в размер самой таблицы.
-- размер таблиц:
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
Знатоки, подскажите пожалуйста.
Есть таблица:
№ записи - ИД компании - Информация
Как посчитать объем дискового пространства, занимаемого информацией определенной компании?
Спасибо.
..."Для просмотра общего размера баз можно использовать скрипт:"Спустя 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