Re: Getting time of a postgresql-request

От: Pierre Frédéric Caillaud
Тема: Re: Getting time of a postgresql-request
Дата: ,
Msg-id: op.uyuqeld3cke6l8@soyouz
(см: обсуждение, исходный текст)
Ответ на: Re: Getting time of a postgresql-request  (Russell Smith)
Список: pgsql-performance

Скрыть дерево обсуждения

Getting time of a postgresql-request  ("Kai Behncke", )
 Re: Getting time of a postgresql-request  (Russell Smith, )
  Re: Getting time of a postgresql-request  (Pierre Frédéric Caillaud<>, )
 Number of tables  (Fabio La Farcioli, )
  Re: Number of tables  (Jochen Erwied, )
  Re: Number of tables  (Craig Ringer, )
   Re: Number of tables  (Fabio La Farcioli, )
  Re: Number of tables  (Craig James, )
   Re: Number of tables  (Greg Stark, )
    Re: Number of tables  (Craig James, )
     Re: Number of tables  (Greg Stark, )
      Re: Number of tables  (Alvaro Herrera, )
       Re: Number of tables  (Greg Stark, )
        Re: Number of tables  ("Kevin Grittner", )
       Re: Number of tables  (Robert Haas, )
      Re: Number of tables  (Jerry Champlin, )
  Re: Number of tables  (Mike Ivanov, )
   Re: Number of tables  (Greg Stark, )
    Re: Number of tables  (Mike Ivanov, )

On Tue, 18 Aug 2009 06:25:57 +0200, Russell Smith <>
wrote:

> Kai Behncke wrote:
>>
>> But I would like to get it in a php-script, like
>>
>> $timerequest_result=pg_result($timerequest,0);
>>
>> (well, that does not work).
>>
>> I wonder: Is there another way to get the time a request needs?
>> How do you handle this?
>>
> $time = microtime()
> $result = pg_result($query);
> echo "Time to run query and return result to PHP: ".(microtime() -
> $time);
>
> Something like that.
>
> Regards
>
> Russell
>

I use the following functions wich protect against SQL injections, make
using the db a lot easier, and log query times to display at the bottom of
the page.
It is much less cumbersome than PEAR::DB or pdo which force you to use
prepared statements (slower if you throw them away after using them just
once)

db_query( "SELECT * FROM stuff WHERE a=%s AND b=%s", array( $a, $b ))

db_query( "SELECT * FROM stuff WHERE id IN (%s) AND b=%s", array(
$list_of_ints, $b ))

------------

function db_quote_query( $sql, $params=false )
{
    // if no params, send query raw
    if( $params === false )    return $sql;
    if( !is_array( $params )) $params = array( $params );

    // quote params
    foreach( $params as $key => $val )
    {
        if( is_array( $val ))
            $params[$key] = implode( ', ', array_map( intval, $val ));
        else
            $params[$key] = is_null($val)?'NULL':("'".pg_escape_string($val)."'");;
    }
    return vsprintf( $sql, $params );
}

function db_query( $sql, $params=false )
{
    // it's already a query
    if( is_resource( $sql ))
        return $sql;

    $sql = db_quote_query( $sql, $params );

    $t = getmicrotime( true );
    if( DEBUG > 1 )    xdump( $sql );
    $r = pg_query( $sql );
    if( !$r )
    {
        if( DEBUG > 1 )
        {
            echo "<div class=bigerror><b>Erreur PostgreSQL :</b><br
/>".htmlspecialchars(pg_last_error())."<br /><br /><b>Requête</b> :<br
/>".$sql."<br /><br /><b>Traceback </b>:<pre>";
            foreach( debug_backtrace() as $t ) xdump( $t );
            echo "</pre></div>";
        }
        die();
    }
    if( DEBUG > 1)    xdump( $r );
    global $_global_queries_log, $_mark_query_time;
    $_mark_query_time = getmicrotime( true );
    $_global_queries_log[] = array( $_mark_query_time-$t, $sql );
    return $r;
}


В списке pgsql-performance по дате сообщения:

От: Tom Lane
Дата:
Сообщение: Re: Weird index or sort behaviour
От: Matthew Wakeling
Дата:
Сообщение: Re: Weird index or sort behaviour