HTML Diff
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