Thread: Logging duration of batch runs

Logging duration of batch runs

From
Christian Kratzer
Date:
Hi,

I have a stored procedure run periodically that assign accounting records
to their respective customers based on username and other criteria.
It also does all kinds of validation work on the accounting records.

I would have liked to have the procedure log start and stop times
using RAISE NOTICE and also store start and stop time of each run
to a logging table.

I currently have following:

---snipp---
CREATE OR REPLACE FUNCTION radius.radius_acct_batch() RETURNS void
     AS '
DECLARE
         batch_id int;
         realm RECORD;
         start_time timestamp;
         stop_time timestamp;
BEGIN
         -- start new batch
         start_time := ''now'';
         INSERT INTO radius.radius_acct_batch ( radius_acct_batch_run_start ) VALUES ( start_time );
         SELECT INTO batch_id currval(''radius.radius_acct_batch_radius_acct_batch_id_seq'');

         RAISE NOTICE ''radius.radius_acct_batch, radius_acct_batch_id=%, start_time=%.'', batch_id, start_time;

         -- do actual work

     ...
     ...
     ...
     ...


         -- register end date in batch
         stop_time := ''now'';
         UPDATE radius.radius_acct_batch SET radius_acct_batch_run_end=stop_time WHERE radius_acct_batch_id=batch_id;
         RAISE NOTICE ''radius.radius_acct_batch, radius_acct_batch_id=%, stop_time=%, done.'', batch_id, stop_time;

         RETURN;
END'
     LANGUAGE plpgsql;
---snipp---

the problem is that start_time and stop_time are identical.

Is there any way I can get plpgsql to reevaluate now at the end
of the batch ???

Greetings
Christian

--
Christian Kratzer                       ck@cksoft.de
CK Software GmbH                        http://www.cksoft.de/
Phone: +49 7452 889 135                 Fax: +49 7452 889 136

Re: Logging duration of batch runs

From
Martijn van Oosterhout
Date:
On Wed, Jun 23, 2004 at 12:49:19PM +0200, Christian Kratzer wrote:
> Hi,
>
> I have a stored procedure run periodically that assign accounting records
> to their respective customers based on username and other criteria.
> It also does all kinds of validation work on the accounting records.
>
> I would have liked to have the procedure log start and stop times
> using RAISE NOTICE and also store start and stop time of each run
> to a logging table.

<snip>

> the problem is that start_time and stop_time are identical.
>
> Is there any way I can get plpgsql to reevaluate now at the end
> of the batch ???

You want timeofday(), not now(). Now() is transaction time, timeofday()
is the real current time.

Hope this helps,
--
Martijn van Oosterhout   <kleptog@svana.org>   http://svana.org/kleptog/
> Patent. n. Genius is 5% inspiration and 95% perspiration. A patent is a
> tool for doing 5% of the work and then sitting around waiting for someone
> else to do the other 95% so you can sue them.

Attachment

Re: Logging duration of batch runs

From
Christian Kratzer
Date:
Hi,
j
On Wed, 23 Jun 2004, Martijn van Oosterhout wrote:

> On Wed, Jun 23, 2004 at 12:49:19PM +0200, Christian Kratzer wrote:
>> Hi,
>>
>> I have a stored procedure run periodically that assign accounting records
>> to their respective customers based on username and other criteria.
>> It also does all kinds of validation work on the accounting records.
>>
>> I would have liked to have the procedure log start and stop times
>> using RAISE NOTICE and also store start and stop time of each run
>> to a logging table.
>
> <snip>
>
>> the problem is that start_time and stop_time are identical.
>>
>> Is there any way I can get plpgsql to reevaluate now at the end
>> of the batch ???
>
> You want timeofday(), not now(). Now() is transaction time, timeofday()
> is the real current time.

thankx! That did it ...

Greetings
Christian

--
Christian Kratzer                       ck@cksoft.de
CK Software GmbH                        http://www.cksoft.de/
Phone: +49 7452 889 135                 Fax: +49 7452 889 136

Re: Logging duration of batch runs

From
Richard Huxton
Date:
Christian Kratzer wrote:
> Hi,
>
> I have a stored procedure run periodically that assign accounting
> records to their respective customers based on username and other criteria.
> It also does all kinds of validation work on the accounting records.
>
> I would have liked to have the procedure log start and stop times using
> RAISE NOTICE and also store start and stop time of each run
> to a logging table.
[snip]
> Is there any way I can get plpgsql to reevaluate now at the end
> of the batch ???

You want timeofday() rather than now(). Note that it returns text rather
than a timestamp.

--
   Richard Huxton
   Archonet Ltd