Прямо нет, нет.Но вы можете сделать косвенную и довольно близкую оценку, проверив время непосредственно до и сразу после запроса, который вас интересует во времени.
$sql = "Your Query";
$bm = "SELECT extract(epoch FROM clock_timestamp())";
$query = "{$bm}; {$sql}; {$bm};";
Функция clock_timestamp () дает вам фактическое время сервера, когда выписканачинается.Поскольку этот SELECT не содержит таблиц, мы можем ожидать, что он будет почти мгновенным.Я думаю, что любой драйвер Pg предлагает поддержку нескольких запросов;важно, чтобы эти 3 запроса (реальный и 2 дополнительных) совпали, иначе вы бы также измеряли время передачи данных ...
Для PHP у меня есть функция для обработки этого.В итоге это выглядит так:
<?php
function pgquery($sql, $conn)
{
// Prepend and append benchmarking queries
$bm = "SELECT extract(epoch FROM clock_timestamp())";
$query = "{$bm}; {$sql}; {$bm};";
// Execute the query, and time it (data transport included)
$ini = microtime(true);
pg_send_query($conn, $query);
while ($resource = pg_get_result($conn))
{
$resources[] = $resource;
}
$end = microtime(true);
// "Extract" the benchmarking results
$q_ini = pg_fetch_row(array_shift($resources));
$q_end = pg_fetch_row(array_pop($resources));
// Compute times
$time = round($end - $ini, 4); # Total time (inc. transport)
$q_time = round($q_end[0] - $q_ini[0], 4); # Query time (Pg server only)
return $resources;
}
?>
Я просто оставил основы там.$ conn содержит ссылку на Pg-соединение, а $ resources - это массив возвращаемых pg-ресурсов (в случае, если вы отправили несколько запросов в вашем $ sql).
$ time содержит общее время, прошедшее с момента, когда запрос остался дляPg сервер, пока не прибудет результат.$ q-time содержит только фактическое время запроса, которое вы хотели (или очень хорошее приближение).
Добавьте обработку ошибок и другую обработку по своему вкусу, у меня есть много, но это не имеет отношения к вашему вопросу.