Postgres DB Size Command


324

Чи є якась команда знайти всі розміри баз даних у Postgres?

Я можу знайти розмір конкретної бази даних за допомогою наступної команди:

select pg_database_size('databaseName');

1
Яка його одиниця? Це в байтах?
Abel Callejo

Це байти. :-)
john16384

Відповіді:


365

І ... Якщо ви, можливо, не хочете вводити цілий запит ... ви також можете ввести ...

\l+ <database_name>

і ви отримаєте детальну інформацію про базу даних, включаючи розмір бази даних.

І ... Щоб отримати розміри всіх баз даних.

ви можете просто ввести ...

\l+

Вам може знадобитися зайти в командний рядок postgresql для запиту за допомогою цих допоміжних команд postgresql.

Перевірте інші команди помічників postgresql, ввівши

\?

у командному рядку postgresql.


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 ().


Іноді база даних містить і індекси. Він має деяке значення для зберігання. Я шукаю одну команду, яка забезпечить розмір повної бази даних.
Beautiful Mind

11
@ user2151087: pg_database_size() включає розміри для індексів
a_horse_with_no_name

У разі, коли хтось цікавився, цей запит надає точно такі ж значення, як і \l+. Формат виводу легше читати, хоча (менше стовпців). Компроміс між записуваністю та
читальністю

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.


1
Для мене тільки \d+ *працював, \d+повертався звичайнийDid not find any relations.
філ пірожков

1
@philpirozhkov Спочатку підключіться до бази даних ( \c dbname), потім зробіть \d+.
chappjc

Це номер один або малий L?
дман

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 ГБ.
онімонні

Виправлено: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

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


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;

3

Запустіть pgAdmin, підключіться до сервера, натисніть на ім'я бази даних та виберіть вкладку статистики. Розмір бази даних ви побачите внизу списку.

Потім, якщо ви натиснете іншу базу даних, вона залишається на вкладці статистики, щоб ви могли легко бачити безліч розмірів бази даних без особливих зусиль. Якщо ви відкриєте список таблиць, він показує всі таблиці та їх розміри.


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
Феріман
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.