Команда Postgres DB Size

324

Есть ли команда, чтобы найти все размеры баз данных в Postgres?

Я могу найти размер конкретной базы данных с помощью следующей команды:

select pg_database_size('databaseName');
Прекрасный разум
источник
1
Какова его единица, хотя? Это в байтах?
Абель
Это байты. :-)
john16384

Ответы:

365

И ... Если вы не хотите вводить весь запрос ... вы также можете набрать ...

\l+ <database_name>

и вы получите некоторые подробности о базе данных, в том числе размер базы данных.

И ... Получить размеры всех баз данных.

Вы можете просто напечатать ...

\l+

Вам может потребоваться перейти в командную строку postgresql, чтобы запросить эти вспомогательные команды postgresql.

Проверьте другие вспомогательные команды postgresql, набрав

\?

в командной строке postgresql.

Ashish
источник
193

Вы можете получить имена всех баз данных, к которым вы можете подключиться, из системной таблицы "pg_datbase". Просто примените функцию к именам, как показано ниже.

select t1.datname AS db_name,  
       pg_size_pretty(pg_database_size(t1.datname)) as db_size
from pg_database t1
order by pg_database_size(t1.datname) desc;

Если вы хотите, чтобы вывод использовался машиной, а не человеком, вы можете отключить функцию pg_size_pretty ().

Майк Шеррилл 'Cat Recall'
источник
Иногда база данных также содержит индексы. Это имеет некоторую стоимость хранения. Я ищу одну команду, которая обеспечит размер всей базы данных.
Прекрасный разум
11
@ user2151087: pg_database_size() включает размеры для индексов
a_horse_with_no_name
Если кому-то было интересно, этот запрос предоставляет те же значения, что и \l+. Формат вывода легче читать, хотя (меньше столбцов). Компромисс между удобочитаемостью и читабельностью ...
Skippy le Grand Gourou
158
-- Database Size
SELECT pg_size_pretty(pg_database_size('Database Name'));
-- Table Size
SELECT pg_size_pretty(pg_relation_size('table_name'));
Сринивасредди Яккиредди
источник
5
Чем этот ответ отличается от ответа Майка?
a_horse_with_no_name
3
В будущем, когда я и другие окажемся здесь, я избавлю вас от хлопот: этот короче и для именованной базы данных / таблицы, где Майк предназначен для всех баз данных на сервере, последний лучше отвечает на исходный вопрос.
Джеймс Браун
78

На основании ответа здесь по @Hendy Ираван

Показать размеры базы данных:

\l+

например

=> \l+
 berbatik_prd_commerce    | berbatik_prd     | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 19 MB   | pg_default | 
 berbatik_stg_commerce    | berbatik_stg     | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 8633 kB | pg_default | 
 bursasajadah_prd         | bursasajadah_prd | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 1122 MB | pg_default | 

Показать размеры таблицы:

\d+

например

=> \d+
 public | tuneeca_prd | table | tomcat | 8192 bytes | 
 public | tuneeca_stg | table | tomcat | 1464 kB    | 

Работает только в psql.

owyongsk
источник
1
Для меня только \d+ *сработало, добрая \d+вернуласьDid not find any relations.
фил пирожков
1
@philpirozhkov Сначала подключитесь к базе данных ( \c dbname), затем сделайте \d+.
chappjc
Это номер один или строчная буква L?
dman
28

Да, есть команда, чтобы найти размер базы данных в Postgres. Это следующее:

SELECT pg_database.datname as "database_name", pg_size_pretty(pg_database_size(pg_database.datname)) AS size_in_mb FROM pg_database ORDER by size_in_mb DESC;
Ануп Шарма
источник
3
Порядок неправильный в этой функции. Он не может отличить читаемые человеком форматы. Например, база данных размером 7151 КБ предшествует базе данных размером 7 ГБ.
onnimonni
Исправлено:SELECT database_name, pg_size_pretty(size) from (SELECT pg_database.datname as "database_name", pg_database_size(pg_database.datname) AS size FROM pg_database ORDER by size DESC) as ordered;
Майкл
1
Я думаю, что вам нужен «сырой» размер только для сортировки. Я использовал это вместо подзапроса SELECT pg_database.datname AS "DB Name", pg_size_pretty(pg_database_size(pg_database.datname)) AS "Size" FROM pg_database ORDER BY (pg_database_size(pg_database.datname)) DESC; .
М-Дахаб
20
SELECT pg_size_pretty(pg_database_size('name of database'));

Даст вам общий размер конкретной базы данных, однако я не думаю, что вы можете сделать все базы данных на сервере.

Однако вы могли бы сделать это ...

DO
$$
DECLARE
r   RECORD;
db_size TEXT;
BEGIN
FOR r in
SELECT datname FROM pg_database
WHERE datistemplate = false
LOOP
db_size:= (SELECT pg_size_pretty(pg_database_size(r.datname)));

RAISE NOTICE 'Database:% , Size:%', r.datname , db_size;

END LOOP;
END;
$$
Шон МакКриди
источник
почему это не может быть один запрос, pg_databaseа не этот отвратительный pl / pgsql?
MozenRath
12

Из вики PostgreSQL .


ПРИМЕЧАНИЕ. Базы данных, к которым пользователь не может подключиться, сортируются так, как если бы они были бесконечного размера.

SELECT d.datname AS Name,  pg_catalog.pg_get_userbyid(d.datdba) AS Owner,
    CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')
        THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(d.datname))
        ELSE 'No Access'
    END AS Size
FROM pg_catalog.pg_database d
    ORDER BY
    CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')
        THEN pg_catalog.pg_database_size(d.datname)
        ELSE NULL
    END DESC -- nulls first
    LIMIT 20

На странице также есть фрагменты для определения размера ваших самых больших отношений и самых больших таблиц.

GollyJer
источник
4

Вы можете использовать запрос ниже, чтобы найти размер всех баз данных PostgreSQL.

Ссылка взята из этого блога.

SELECT 
    datname AS DatabaseName
    ,pg_catalog.pg_get_userbyid(datdba) AS OwnerName
    ,CASE 
        WHEN pg_catalog.has_database_privilege(datname, 'CONNECT')
        THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(datname))
        ELSE 'No Access For You'
    END AS DatabaseSize
FROM pg_catalog.pg_database
ORDER BY 
    CASE 
        WHEN pg_catalog.has_database_privilege(datname, 'CONNECT')
        THEN pg_catalog.pg_database_size(datname)
        ELSE NULL
    END DESC;
Anvesh
источник
3

Запустите pgAdmin, подключитесь к серверу, щелкните по имени базы данных и выберите вкладку статистики. Вы увидите размер базы данных внизу списка.

Затем, если вы щелкнете по другой базе данных, она останется на вкладке статистики, так что вы сможете без труда просматривать базы данных разных размеров. Если вы откроете список таблиц, он покажет все таблицы и их размеры.

SPRBRN
источник
1
А если вы щелкнете по Databasesузлу дерева (присоединенному к соединению с БД) и выберите Statisticsвкладку, вам будет представлен хороший обзор всех баз данных и их размеров (третий столбец).
zloster
2
du -k /var/lib/postgresql/ |sort -n |tail
Джон Карнс
источник
2
Возможно, вы захотите добавить больше контекста о предположениях, которые это делает в отношении того, где база данных хранит свои данные, как будут выглядеть выходные данные и т. Д.
fzzfzzfzz
3
Хотя это может быть точный ответ, рекомендуется включить некоторые объяснения.
снайпер
Вот правильная команда на CentOS: du -k /var/lib/pgsql/ | sort -n | tail
Фериман