Подтвердить что ты не робот

Как получить статус выполняемого запроса в базе данных postgresql

У меня есть запрос select, который работает очень долго. Как я получу статус этого запроса, например, как долго он будет работать? Независимо от того, обращается ли он к данным из таблиц или нет.

Примечание. Согласно pg_stat_activity запрос работает как активный. Не в состоянии ожидания. Как и в Oracle, мы можем видеть исходный/целевой и предварительный статус запроса - есть ли что-то подобное в postgresql?

4b9b3361

Ответ 1

Когда включена функция stats_command_string, таблица pg_stat_activity содержит все активные строки запросов. Простейший запрос будет отображать все текущие строки запроса, вместе с которыми они ссылаются, и идентификатор процесса (PID) процесса, обслуживающего этот запрос.

SELECT datname,pid,state,query FROM pg_stat_activity

Пример:

database1=# SELECT datname,procpid,current_query FROM pg_stat_activity ORDER BY procpid ;
    datname    | procpid | current_query 
---------------+---------+---------------
 mydatabaseabc |    2587 | <IDLE>
 anotherdb     |   15726 | SELECT * FROM users WHERE id=123 ;  
 mydatabaseabc |   15851 | <IDLE>
(3 rows)

Каждая строка pg_stat_activity представляет один процесс PostgreSQL (PostgreSQL использует один серверный процесс для каждого соединения).

Любые процессы, которые в настоящее время не выполняют никаких запросов, будут показывать <IDLE> как current_query.

Отметьте этот для справки

Ответ 2

Это еще не сделано, но находится на TODO.

Ответ 3

Основываясь на ответе @Anshu, я использую:

SELECT datname, pid, state, query, age(clock_timestamp(), query_start) AS age 
FROM pg_stat_activity
WHERE state <> 'idle' 
    AND query NOT LIKE '% FROM pg_stat_activity %' 
ORDER BY age;

Ответ 4

мы можем найти журнал запросов в отношении базы данных в postgres.

select *
from pg_stat_activity
where datname = 'yourdatabasename'

Это даст активный журнал запросов базы данных.