pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Bruce Momjian <pgman@candle.pha.pa.us>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Denis Zaitsev <zzz@anda.ru>
Cc: pgsql-sql@postgresql.org
Subject: Re: Very strange 'now' behaviour in nested triggers.
Date: Tue, 29 Jul 2003 22:20:16 -0400 (EDT)
Message-ID: <200307300220.h6U2KGR12803@candle.pha.pa.us> (raw)
In-Reply-To: <4629.1059320950@sss.pgh.pa.us>


Could we cleanly convert 'now' to now()?  I assume not because we pass
the string to the date code, and have no way to pass back a function
(now()).

Having now and now() behave differently certainly is strange.

CURRENT_TIMESTAMP works fine, but it does because it isn't in quotes. 
Strangely, CURRENT_TIMESTAMP converts to 'now', not now().  Is that a
problem?

            | CURRENT_TIMESTAMP
                {
                    /*
                     * Translate as "'now'::text::timestamptz".
                     * See comments for CURRENT_DATE.
                     */
                    A_Const *s = makeNode(A_Const);
                    TypeName *d;

                    s->val.type = T_String;
                    s->val.val.str = "now";
                    s->typename = SystemTypeName("text");

                    d = SystemTypeName("timestamptz");
                    /* SQL99 mandates a default precision of 6 for timestamp.
                     * Also, that is about as precise as we will get since
                     * we are using a microsecond time interface.
                     * - thomas 2001-12-07
                     */
                    d->typmod = 6;

                    $$ = (Node *)makeTypeCast((Node *)s, d);
                }
 

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

Tom Lane wrote:
> Denis Zaitsev <zzz@anda.ru> writes:
> > On Sat, Jul 26, 2003 at 10:31:44AM -0400, Tom Lane wrote:
> >> That's a dangerous way to define the default --- 'now' is taken as a
> >> literal of type timestamp, which means it will be reduced to a timestamp
> >> constant as soon as a statement that requires the default is planned.
> 
> > Aaa...  So, the INSERT inside a trigger will use the 'now' for the
> > time this trigger is compiled (i.e. called first time)?  Do I
> > understand right?  And the only outer trigger uses the right 'now' as
> > its value goes from the top-level INSERT...
> 
> Right.
> 
> I put up a proposal in pgsql-hackers to change this behavior:
> http://archives.postgresql.org/pgsql-hackers/2003-07/msg00818.php
> If we made that change then the "wrong" way of defining the default
> would fail in an obvious fashion --- the 'now' would get reduced to a
> particular time immediately at CREATE TABLE.  Doubtless this would annoy
> some people, but the "right" way of defining the default isn't really
> any harder, and it would save folks from getting burnt in corner cases,
> like you were.
> 
> Any comments?
> 
> 			regards, tom lane
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
> 

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073



view thread (17+ messages)  latest in thread

Message-ID: <200307300220.h6U2KGR12803@candle.pha.pa.us>
Permalink:  ../200307300220.h6U2KGR12803@candle.pha.pa.us/
Also on:    postgresql.org/message-id/200307300220.h6U2KGR12803@candle.pha.pa.us

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: pgman@candle.pha.pa.us, tgl@sss.pgh.pa.us, zzz@anda.ru
  Subject: Re: Very strange 'now' behaviour in nested triggers.
  In-Reply-To: <200307300220.h6U2KGR12803@candle.pha.pa.us>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox