直接,不,没有。但是,您可以通过检查您对时间感兴趣的查询之前和之后的时间来进行间接且非常接近的估计。
$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 仅保存您想要的实际查询时间(或非常好的近似值)。
根据自己的喜好添加错误处理和其他处理,我有很多但这与您的问题无关。