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

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

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

4 ответа

Основываясь на ответе @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;

Когда 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> как текущий_запрос.

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

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

select *
from pg_stat_activity
where datname = 'yourdatabasename'

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

Это еще не может быть сделано, но находится на TODO.

Другие вопросы по тегам