PostgresQL Истекшее время запроса в возврате SELECT - PullRequest
0 голосов
/ 26 мая 2020

Мой запрос PostgreSQL возвращает только одну строку, и мне нужно включить в SELECT количество времени, которое потребовалось для возврата.

Как мне это сделать?

Например, Таблица hello

SELECT COUNT(h.*) as "count", <insert query time calculation here> as "elapsed_ms"
FROM hello h;

С уважением

1 Ответ

0 голосов
/ 26 мая 2020

Вы не можете сделать это в одном операторе SQL, потому что PostgreSQL не предоставляет системную функцию или системный столбец в SQL для получения текущего времени выполнения запроса (функция statement_timestamp() может использоваться для запуска запроса, но есть нет соответствующей функции для завершения запроса).

Но вы можете попробовать что-то вроде этого в функции:

create function exec_count() 
returns table (ccount int, ctime_microsec int) 
language plpgsql
as
$$
declare
 v_begin timestamp;
 v_end timestamp;
 v_s int;
 v_mls int;
 v_mcs int;
 v_count int;
 v_time int;
begin
 v_begin = clock_timestamp();
 select count(*) into v_count from hello h;
 v_end = clock_timestamp();
 select extract(microseconds from (v_end - v_begin)) into v_mcs;
 select extract(milliseconds from (v_end - v_begin)) into v_mls;
 select extract(second from v_end - v_begin) into v_s;
 v_time = v_mcs + v_mls*1000 * v_s*1000*1000;
 return query select v_count, v_time;
end;
$$;

Вы можете вызвать функцию в SQL вместо запроса:

select * from exec_count();
 ccount | ctime_microsec 
--------+----------------
    457 |            407
(1 row)

Эта функция вычисляет время выполнения в микросекундах и предполагает, что запрос не занимает более 60 секунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...