Skip site navigation (1) Skip section navigation (2)

now() in PL/pgSQL Functions

From: "Yosef Haas" <yosef(at)karatedepot(dot)com>
To: <pgsql-bugs(at)postgresql(dot)org>
Subject: now() in PL/pgSQL Functions
Date: 2007-01-30 14:44:19
Message-ID: 009f01c7447d$1fb93260$0100a8c0@cqg2y51 (view raw or flat)
Thread:
Lists: pgsql-bugs
This is in version 8.1.4.

 

I've noticed what seems to be a strange behavior - it may be by design, but
I figured I'd ask.

 

Run this simple test function:

 

create or replace function test() RETURNS bool AS '

begin

            raise notice ''%'',now();

            for i IN 0..50000000  loop

            end loop;

            raise notice ''%'',now();

            return true;

end;

' 

LANGUAGE 'plpgsql';

 

It should print the current date, wait a few seconds (by counting to 50
million)

And then print the current date. Clearly, the two dates are not identical;
however this is how it executes:

 

catalog=# select test();

NOTICE:  2007-01-30 09:33:19.323702-05

NOTICE:  2007-01-30 09:33:19.323702-05

 test

------

 t

(1 row)

 

For some reason it is using the same value for both "now()" calls. Is this a
bug, or by design? If it's by design what can I do to get the right time. I
know that the function only returns when it's finished executing, but
shouldn't now() return the actual time and not the time that the function
begins?

 

Thanks,

 

Yosef Haas

yosef(at)karatedepot(dot)com

 

Responses

pgsql-bugs by date

Next:From: Magnus HaganderDate: 2007-01-30 14:58:40
Subject: Re: [BUGS] Missing error message on missing ssl-key-files
Previous:From: Sergiy VyshnevetskiyDate: 2007-01-30 13:18:36
Subject: Re: BUG #2945: possibly forgotten SPI_push()/SPI_pop()

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group