Thread: now() gives same time within the session
Hi,
I need to log the start and end time of the procedures in a table. But the start and end time are same. This is how I recreated the issue.
create table test_time (time timestamp);
delete from test_time;
insert into test_time select now();
SELECT pg_sleep(10);
insert into test_time select now();
SELECT pg_sleep(10);
insert into test_time select now();
SELECT pg_sleep(10);
insert into test_time select now();
SELECT pg_sleep(10);
select * from test_time;
"2010-07-12 12:43:40.509746"
"2010-07-12 12:43:40.509746"
"2010-07-12 12:43:40.509746"
"2010-07-12 12:43:40.509746"
Atul Goel
SENIOR DEVELOPER
Global DataPoint
Middlesex House, 34-42 Cleveland Street
London W1T 4LB, UK
T: +44 (0)20 7079 4827
M: +44 (0)7846765098
In response to Atul.Goel@globaldatapoint.com : > Hi, > > > > I need to log the start and end time of the procedures in a table. But the > start and end time are same. This is how I recreated the issue. > > > > create table test_time (time timestamp); > > delete from test_time; > > insert into test_time select now(); Use timeofday() instead, now() returns the transaction starting time. BEGIN test=*# select now(); now ------------------------------- 2010-07-12 13:13:28.907043+02 (1 row) test=*# select timeofday(); timeofday -------------------------------------- Mon Jul 12 13:13:36.187703 2010 CEST (1 row) test=*# select now(); now ------------------------------- 2010-07-12 13:13:28.907043+02 (1 row) test=*# Regards, Andreas -- Andreas Kretschmer Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header) GnuPG: 0x31720C99, 1006 CCB4 A326 1D42 6431 2EB0 389D 1DC2 3172 0C99
Sure thanks a lot. Regards, Atul Goel -----Original Message----- From: pgsql-performance-owner@postgresql.org [mailto:pgsql-performance-owner@postgresql.org] On Behalf Of A. Kretschmer Sent: 12 July 2010 12:15 To: pgsql-performance@postgresql.org Subject: Re: [PERFORM] now() gives same time within the session In response to Atul.Goel@globaldatapoint.com : > Hi, > > > > I need to log the start and end time of the procedures in a table. But the > start and end time are same. This is how I recreated the issue. > > > > create table test_time (time timestamp); > > delete from test_time; > > insert into test_time select now(); Use timeofday() instead, now() returns the transaction starting time. BEGIN test=*# select now(); now ------------------------------- 2010-07-12 13:13:28.907043+02 (1 row) test=*# select timeofday(); timeofday -------------------------------------- Mon Jul 12 13:13:36.187703 2010 CEST (1 row) test=*# select now(); now ------------------------------- 2010-07-12 13:13:28.907043+02 (1 row) test=*# Regards, Andreas -- Andreas Kretschmer Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header) GnuPG: 0x31720C99, 1006 CCB4 A326 1D42 6431 2EB0 389D 1DC2 3172 0C99 -- Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-performance This e-mail is confidential and should not be used by anyone who is not the original intended recipient. Global DataPointLimited does not accept liability for any statements made which are clearly the sender's own and not expressly madeon behalf of Global DataPoint Limited. No contracts may be concluded on behalf of Global DataPoint Limited by means ofe-mail communication. Global DataPoint Limited Registered in England and Wales with registered number 3739752 RegisteredOffice Middlesex House, 34-42 Cleveland Street, London W1T 4LB
On Mon, Jul 12, 2010 at 4:15 AM, A. Kretschmer <andreas.kretschmer@schollglas.com> wrote: > In response to Atul.Goel@globaldatapoint.com : >> Hi, >> >> >> >> I need to log the start and end time of the procedures in a table. But the >> start and end time are same. This is how I recreated the issue. >> >> >> >> create table test_time (time timestamp); >> >> delete from test_time; >> >> insert into test_time select now(); > > > Use timeofday() instead, now() returns the transaction starting time. Is this part of the SQL standard? -- Rob Wultsch wultsch@gmail.com
On 12 July 2010 14:11, Rob Wultsch <wultsch@gmail.com> wrote: > On Mon, Jul 12, 2010 at 4:15 AM, A. Kretschmer > <andreas.kretschmer@schollglas.com> wrote: >> In response to Atul.Goel@globaldatapoint.com : >>> Hi, >>> >>> >>> >>> I need to log the start and end time of the procedures in a table. But the >>> start and end time are same. This is how I recreated the issue. >>> >>> >>> >>> create table test_time (time timestamp); >>> >>> delete from test_time; >>> >>> insert into test_time select now(); >> >> >> Use timeofday() instead, now() returns the transaction starting time. > > > Is this part of the SQL standard? > I don't believe it is. See http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-CURRENT for more info. Thom
In response to Rob Wultsch : > On Mon, Jul 12, 2010 at 4:15 AM, A. Kretschmer > <andreas.kretschmer@schollglas.com> wrote: > > Use timeofday() instead, now() returns the transaction starting time. > > > Is this part of the SQL standard? Don't know, sorry. Andreas -- Andreas Kretschmer Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header) GnuPG: 0x31720C99, 1006 CCB4 A326 1D42 6431 2EB0 389D 1DC2 3172 0C99
On Mon, Jul 12, 2010 at 06:11:31AM -0700, Rob Wultsch wrote: > On Mon, Jul 12, 2010 at 4:15 AM, A. Kretschmer > <andreas.kretschmer@schollglas.com> wrote: > > In response to Atul.Goel@globaldatapoint.com : > >> Hi, > >> > >> > >> > >> I need to log the start and end time of the procedures in a table. But the > >> start and end time are same. This is how I recreated the issue. > >> > >> > >> > >> create table test_time (time timestamp); > >> > >> delete from ?test_time; > >> > >> insert into test_time select now(); > > > > > > Use timeofday() instead, now() returns the transaction starting time. > > > Is this part of the SQL standard? > No, see section 9.9.4 of the manual. Cheers, Ken
On 12/07/10 14:15, A. Kretschmer wrote: > Use timeofday() instead, now() returns the transaction starting time. timeofday() is a legacy function kept only for backwards-compatibility. It returns a string, which is quite awkward. Use clock_timestamp() instead. -- Heikki Linnakangas EnterpriseDB http://www.enterprisedb.com