Bezpośrednio, nie, nie ma. Ale możesz zrobić oszacowanie pośrednie i dość bliskie, sprawdzając czas tuż przed zapytaniem, które interesuje Cię czas.
$sql = "Your Query";
$bm = "SELECT extract(epoch FROM clock_timestamp())";
$query = "{$bm}; {$sql}; {$bm};";
Funkcja clock_timestamp() podaje serwerowi aktualny czas rozpoczęcia instrukcji. Ponieważ SELECT nie zawiera tabel, możemy oczekiwać, że będzie to niemal natychmiastowe. Chyba każdy sterownik Pg oferuje obsługę wielu zapytań; ważne jest, aby te 3 pytania (rzeczywisty i 2 dodatki) pasowały do siebie, w przeciwnym razie mierzyłbyś również czas transportu danych ...
Dla PHP mam funkcję, aby sobie z tym poradzić. Podsumowując, wygląda tak:
<?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;
}
?>
Właśnie opuściłem podstawy. $ conn przechowuje łącze do połączenia Pg, a $ resources to tablica zwróconych zasobów pg (w przypadku gdy wysłałeś wiele zapytań do twojego $ sql).
$ czas pozostawia całkowity czas od momentu pozostawienia zapytania do serwera Pg, dopóki nie nadejdzie wynik. $ q-time zawiera tylko rzeczywisty czas zapytania, który chciałeś (lub bardzo dobre przybliżenie).
Dodaj obsługę błędów i inne przetwarzanie według własnych upodobań, mam wiele, ale nie ma to znaczenia dla twojego pytania.
Czy jest jakiś sposób, aby po prostu wydrukować czas, tak, że nie trzeba analizować pliku? To właśnie zrobię, jeśli będę musiał, ale wydaje mi się, że powinien być prostszy sposób. –
'psql -c" WYBIERZ ANALIZĘ wybierz * z mytable gdzie col1 ... "| grep "Total runtime" ' –
Naprawdę szukam sposobu, aby to zrobić całkowicie w SQL, jeśli to możliwe. Wygląda na to, że powinienem móc zapisać środowisko wykonawcze zwracane w powłoce interaktywnej psql bezpośrednio jako wartość. Twoja odpowiedź jest całkiem poprawna i jest tym, co planowałem zrobić, jeśli nikt nie może mi dać odpowiedzi na czysto SQL. Dziękujemy za poświęcony czas! –