Вы не можете сделать это в одном операторе 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 секунд.