Re: Possible Typecasting Bug with coalesce() - Mailing list pgsql-hackers

From Tom Lane
Subject Re: Possible Typecasting Bug with coalesce()
Date
Msg-id 5498.1153243694@sss.pgh.pa.us
Whole thread Raw
In response to Possible Typecasting Bug with coalesce()  ("MotherMGA" <sbbowers@gmail.com>)
Responses Re: Possible Typecasting Bug with coalesce()  ("Zeugswetter Andreas DCP SD" <ZeugswetterA@spardat.at>)
List pgsql-hackers
"MotherMGA" <sbbowers@gmail.com> writes:
> => select now()>coalesce('Jul 14 2006 9:16:47AM');

The coalesce() function is going to resolve its datatype as "text" in
this situation, and then text dominates timestamp in the comparison
(ie, the result of now() is coerced to text).  When you write

>  => select now()>'Jul 14 2006 9:16:47AM';

the literal's type doesn't have to be resolved until it's compared to
now(), and that comparison is what gives the parser the hint that the
literal ought to be considered to be a timestamp rather than just text.

> => select now()>coalesce('Jul 14 2006 9:16:47AM'::timestamp with time
> zone);

This is what you need to do if you want the literal to be treated as
timestamp right off.

The only bug I see here is that implicit coercions to text are a bad
idea :-( --- IMHO it would be better if your first query failed instead
of giving you unexpected behavior.
        regards, tom lane


pgsql-hackers by date:

Previous
From: Andrew Dunstan
Date:
Subject: Re: password is no required, authentication is overridden
Next
From: "Andrew Hammond"
Date:
Subject: Re: password is no required, authentication is overridden