Как подключить активных пользователей к базе данных postgreSQL через SQL?

87

Как подключить активных пользователей к базе данных postgreSQL через SQL? Это может быть идентификатор пользователя или количество пользователей.

Йохан Бреслер
источник

Ответы:

114

(вопрос) Разве вы не получили эту информацию в

выберите * из pg_user ;

или используя представление pg_stat_activity :

select * from pg_stat_activity;

Добавлено:

вид говорит:

Одна строка для каждого серверного процесса, показывающая OID базы данных, имя базы данных, идентификатор процесса, OID пользователя, имя пользователя , текущий запрос, статус ожидания запроса, время начала выполнения текущего запроса, время, когда был запущен процесс, а также адрес клиента и номер порта . Столбцы, содержащие данные по текущему запросу, доступны, если не отключен параметр stats_command_string. Кроме того, эти столбцы видны только в том случае, если пользователь, изучающий представление, является суперпользователем или таким же пользователем, как и пользователь, владеющий процессом, о котором сообщается.

Вы не можете отфильтровать и получить эту информацию? это будут текущие пользователи в базе данных, вы можете использовать время начала выполнения, чтобы получить все запросы за последние 5 минут, например ...

что-то такое.

Balexandre
источник
2
Нет, это список известных пользователей, а не текущий подключенный номер.
Keltia
как насчет сборщика статистики? (перейдите по ссылке в названии представления)
balexandre
4
@ mm2010: pg_stat_activity: только активные пользователи. pg_user: список всех пользователей
Хао,
4
Проголосованный вниз, ответ немного блуждает и предоставляет некоторую информацию, которая может ввести в заблуждение будущих читателей, например, pg_user бесполезен для поиска активных пользователей, подключенных к базе данных PostgreSQL.
Брэд Кох,
40

Используя информацию balexandre:

SELECT usesysid, usename FROM pg_stat_activity;
Свен Лилиенталь
источник
2
Вы можете добавить client_addrк указанному выше запросу, чтобы получить IP клиента.
fagiani
7

OP запросил пользователей, подключенных к определенной базе данных :

-- Who's currently connected to my_great_database?
SELECT * FROM pg_stat_activity 
  WHERE datname = 'my_great_database';

Это дает вам всевозможную сочную информацию (как уже упоминали другие), такую ​​как

  • идентификатор пользователя (столбец usesysid)
  • имя пользователя ( usename)
  • имя клиентского приложения ( appname), если ему не удается установить эту переменную - psqlделает :-)
  • IP-адрес ( client_addr)
  • в каком состоянии он находится (пара столбцов, связанных с состоянием и статусом ожидания)
  • и всем нравится, текущая команда SQL run ( query)
Том Хундт
источник