0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: postgresql, базы данных, таблицы, postgres, постгресс, полезные команды, размер, активность пользователей</p>
1
<p>Теги: postgresql, базы данных, таблицы, postgres, постгресс, полезные команды, размер, активность пользователей</p>
2
<p>Мы уже писали о командах для<a>безопасного изменения типа поля</a>и<a>работы с конфигурацией</a>в PostgreSQL. В этот раз поговорим о командах, позволяющих получать информацию о базе данных: размере БД и таблиц, перечне таблиц и пользователей, активности пользователей.</p>
2
<p>Мы уже писали о командах для<a>безопасного изменения типа поля</a>и<a>работы с конфигурацией</a>в PostgreSQL. В этот раз поговорим о командах, позволяющих получать информацию о базе данных: размере БД и таблиц, перечне таблиц и пользователей, активности пользователей.</p>
3
<h2>Размер БД</h2>
3
<h2>Размер БД</h2>
4
<p>Для получения физического размера файлов применяем следующий запрос:</p>
4
<p>Для получения физического размера файлов применяем следующий запрос:</p>
5
SELECT pg_database_size(current_database());<p>Результат будет представлен в формате числа вида 41809016. В нашем случае current_database() является функцией, возвращающей имя текущей БД. Вместо неё мы можем ввести имя текстом:</p>
5
SELECT pg_database_size(current_database());<p>Результат будет представлен в формате числа вида 41809016. В нашем случае current_database() является функцией, возвращающей имя текущей БД. Вместо неё мы можем ввести имя текстом:</p>
6
SELECT pg_database_size('my_database');<p>Если хотим получить информацию в более удобочитаемом виде, нам пригодится функция pg_size_pretty:</p>
6
SELECT pg_database_size('my_database');<p>Если хотим получить информацию в более удобочитаемом виде, нам пригодится функция pg_size_pretty:</p>
7
SELECT pg_size_pretty(pg_database_size(current_database()));<p>В итоге получим информацию вида 40 Mb.</p>
7
SELECT pg_size_pretty(pg_database_size(current_database()));<p>В итоге получим информацию вида 40 Mb.</p>
8
<h2>Перечень таблиц</h2>
8
<h2>Перечень таблиц</h2>
9
<p>Порой, нужно получить перечень таблиц БД. Для этого нам пригодится следующий запрос:</p>
9
<p>Порой, нужно получить перечень таблиц БД. Для этого нам пригодится следующий запрос:</p>
10
SELECT table_name FROM information_schema.tables WHERE table_schema NOT IN ('information_schema','pg_catalog');<p>Здесь information_schema - это стандартная схема БД, содержащая коллекции представлений (views): таблицы, поля и т. п. Представления таблиц включают информацию о всех таблицах БД.</p>
10
SELECT table_name FROM information_schema.tables WHERE table_schema NOT IN ('information_schema','pg_catalog');<p>Здесь information_schema - это стандартная схема БД, содержащая коллекции представлений (views): таблицы, поля и т. п. Представления таблиц включают информацию о всех таблицах БД.</p>
11
<p>Следующий запрос выберет все таблицы из указанной схемы текущей БД:</p>
11
<p>Следующий запрос выберет все таблицы из указанной схемы текущей БД:</p>
12
SELECT table_name FROM information_schema.tables WHERE table_schema NOT IN ('information_schema', 'pg_catalog') AND table_schema IN('public', 'myschema');<p>Стоит добавить, что в последнем условии IN мы можем указать имя определенной схемы.</p>
12
SELECT table_name FROM information_schema.tables WHERE table_schema NOT IN ('information_schema', 'pg_catalog') AND table_schema IN('public', 'myschema');<p>Стоит добавить, что в последнем условии IN мы можем указать имя определенной схемы.</p>
13
<h2>Размер таблицы</h2>
13
<h2>Размер таблицы</h2>
14
<p>Как и в случае с получением размера БД, размер данных таблицы мы можем вычислить посредством соответствующей функции:</p>
14
<p>Как и в случае с получением размера БД, размер данных таблицы мы можем вычислить посредством соответствующей функции:</p>
15
SELECT pg_relation_size('accounts');<p>В нашем случае функция pg_relation_size возвращает объём, занимаемый на диске указанным слоем заданной таблицы либо индекса.</p>
15
SELECT pg_relation_size('accounts');<p>В нашем случае функция pg_relation_size возвращает объём, занимаемый на диске указанным слоем заданной таблицы либо индекса.</p>
16
<h2>Имя наибольшей таблицы</h2>
16
<h2>Имя наибольшей таблицы</h2>
17
<p>Чтобы вывести список таблиц текущей БД, отсортированный по размеру таблицы, подойдёт следующий запрос:</p>
17
<p>Чтобы вывести список таблиц текущей БД, отсортированный по размеру таблицы, подойдёт следующий запрос:</p>
18
SELECT relname, relpages FROM pg_class ORDER BY relpages DESC;<p>Чтобы получить информацию о наибольшей таблице, мы можем ограничить запрос посредством LIMIT:</p>
18
SELECT relname, relpages FROM pg_class ORDER BY relpages DESC;<p>Чтобы получить информацию о наибольшей таблице, мы можем ограничить запрос посредством LIMIT:</p>
19
SELECT relname, relpages FROM pg_class ORDER BY relpages DESC LIMIT 1;<p>Что здесь что: -<strong>relname</strong>- имя таблицы, представления, индекса и т. д.; -<strong>relpages</strong>- размер представления этой таблицы на диске в количестве страниц (по умолчанию одна страницы - 8 Кб); -<strong>pg_class</strong>- системная таблица, содержащая информацию о связях таблиц БД.</p>
19
SELECT relname, relpages FROM pg_class ORDER BY relpages DESC LIMIT 1;<p>Что здесь что: -<strong>relname</strong>- имя таблицы, представления, индекса и т. д.; -<strong>relpages</strong>- размер представления этой таблицы на диске в количестве страниц (по умолчанию одна страницы - 8 Кб); -<strong>pg_class</strong>- системная таблица, содержащая информацию о связях таблиц БД.</p>
20
<h2>Перечень подключенных пользователей, активность пользователя</h2>
20
<h2>Перечень подключенных пользователей, активность пользователя</h2>
21
<p>Если хотим узнать имя, IP и используемый порт подключенных юзеров, выполняем:</p>
21
<p>Если хотим узнать имя, IP и используемый порт подключенных юзеров, выполняем:</p>
22
SELECT datname,usename,client_addr,client_port FROM pg_stat_activity;<p>Если хотим узнать активность соединения конкретного пользователя, выполняем:</p>
22
SELECT datname,usename,client_addr,client_port FROM pg_stat_activity;<p>Если хотим узнать активность соединения конкретного пользователя, выполняем:</p>
23
SELECT datname FROM pg_stat_activity WHERE usename = 'devuser';<p>Статья написана по материалам "<a>15 Advanced PostgreSQL Commands with Examples</a>" и "<a>10 Most Useful PostgreSQL Commands with Examples</a>".</p>
23
SELECT datname FROM pg_stat_activity WHERE usename = 'devuser';<p>Статья написана по материалам "<a>15 Advanced PostgreSQL Commands with Examples</a>" и "<a>10 Most Useful PostgreSQL Commands with Examples</a>".</p>
24
24