Обсуждение: Implicit casting and JOIN syntax constraints

Поиск
Список
Период
Сортировка

Implicit casting and JOIN syntax constraints

От
"Roman Fail"
Дата:
>> HOWEVER.....look at this:
>> EXPLAIN ANALYZE select batchdetailid from batchdetail where batchdetailid = 27321::bigint;
>>  Index Scan using batchdetail_pkey on batchdetail  (cost=0.00..4.13 rows=1 width=8) (actual time=0.03..0.03 rows=1
loops=1)
>>    Index Cond: (batchdetailid = 27321::bigint)
>>  Total runtime: 0.07 msec

> Jeff Trout wrote:
> We had this happen to us - we had a serial8 column (int8) and our query
> was straight forward where id = 12345; which ran craptacularly.  After
> much head banging and cursing I had tried where id = '12345' and it
> magically worked. I think the parser is interpreting a "number" to be an
> int4 instead of int8.  (instead of quotes you can also cast via
> 12345::int8 like you did)

> Perhaps this should go on the TODO - when one side is an int8 and the
> other is a literal number assume the number to be int8 instead of int4?

It seems to me that this should absolutely go on the TODO list.  Why does the planner require an explicit cast when the
implicitcast is so obvious?  Does Oracle do this?  I can assure you that MSSQL does not.  
 
 
If getting more people to migrate to PostgreSQL is a major goal these days, it's got to be relatively easy.  I think
thatalmost everyone coming from a MSSQL or Access background is going to have big problems with this.  And the other
issueof the JOIN syntax constraining the planner - you've got to be able to turn that off too.  I've been writing SQL
queriesfor 10 years in FoxPro, Access, SQL Server, MySQL, and Sybase.  I have never come across this very confusing
"feature"until now.  
 
 
How do we go about voting an issue onto the TODO list?  These two get my vote for sure!
 
Roman

Re: Implicit casting and JOIN syntax constraints

От
Andrew Sullivan
Дата:
On Fri, Jan 17, 2003 at 06:48:28AM -0800, Roman Fail wrote:
> It seems to me that this should absolutely go on the TODO list.
> Why does the planner require an explicit cast when the implicit
> cast is so obvious?  Does Oracle do this?  I can assure you that
> MSSQL does not.

The reason it happens is because of the flexible datatype system in
PostgreSQL.  Because it's easy to add a datatype, you pay in other
ways.  The problem is coming up with a nice, clean set of rules for
coercion.  See the link that Tom Lane posted, and the thousands of
other discussions around this in the archives.  Yes, it's a pain.
Everyone knows that.  A complete solution is what's missing.

> too.  I've been writing SQL queries for 10 years in FoxPro, Access,
> SQL Server, MySQL, and Sybase.  I have never come across this very
> confusing "feature" until now.

Well, there are differences between every system.  Indeed, the "SQL"
of MySQL is so far from anything resembling the standard that one
could argue it doesn't comply at all.  You're right that it means a
steep learning curve for some things, and the problems can be
frustrating.  But that doesn't mean you want to throw the baby out
with the bathwater.  The ability to give the planner hints through
the JOIN syntax is, frankly, a real help when you're faced with
certain kinds of performance problems.  Some systems don't give you a
knob to tune there at all.  Is it different from other systems?
Sure.  Is that automatically a reason to pitch the feature?  No.
(Further discussion of this probably belongs on -general, if
anywhere, by the way.)

A

----
Andrew Sullivan                         204-4141 Yonge Street
Liberty RMS                           Toronto, Ontario Canada
<andrew@libertyrms.info>                              M2P 2A8
                                         +1 416 646 3304 x110