From: | Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | Denis Zaitsev <zzz(at)anda(dot)ru>, pgsql-sql(at)postgresql(dot)org |
Subject: | Re: Very strange 'now' behaviour in nested triggers. |
Date: | 2003-07-30 02:20:16 |
Message-ID: | 200307300220.h6U2KGR12803@candle.pha.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-jdbc pgsql-sql |
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(at)anda(dot)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(at)postgresql(dot)org
>
--
Bruce Momjian | http://candle.pha.pa.us
pgman(at)candle(dot)pha(dot)pa(dot)us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073
From | Date | Subject | |
---|---|---|---|
Next Message | Eric Tan | 2003-07-30 07:15:42 | How to insert Chinese (big5) through JDBC? |
Previous Message | Denis Zaitsev | 2003-07-29 22:05:14 | Re: Very strange 'now' behaviour in nested triggers. |
From | Date | Subject | |
---|---|---|---|
Next Message | Rod Taylor | 2003-07-30 02:28:19 | Re: function returning setof performance question |
Previous Message | Mark Bronnimann | 2003-07-30 02:08:59 | function returning setof performance question |