Обсуждение: Odd results in SELECT
Can anyone suggest why this might be happening (I think it's in 7.1b4):
SELECT definition as viewdef, (select oid from pg_rewrite where
rulename='_RETszallitolevel_tetele_ervenyes')as view_oid from pg_views where viewname =
'szallitolevel_tetele_ervenyes';
=> view_oid is 133652.
SELECT definition as viewdef, (select oid from pg_rewrite where rulename='_RET' ||
'szallitolevel_tetele_ervenyes')as view_oid from pg_views where viewname = 'szallitolevel_tetele_ervenyes';
=> view_oid is NULL
----------------------------------------------------------------
Philip Warner | __---_____
Albatross Consulting Pty. Ltd. |----/ - \
(A.B.N. 75 008 659 498) | /(@) ______---_
Tel: (+61) 0500 83 82 81 | _________ \
Fax: (+61) 0500 83 82 82 | ___________ |
Http://www.rhyme.com.au | / \| | --________--
PGP key available upon request, | /
and from pgp5.ai.mit.edu:11371 |/
On Fri, 11 May 2001, Philip Warner wrote: > Can anyone suggest why this might be happening (I think it's in 7.1b4): > > SELECT definition as viewdef, > (select oid from pg_rewrite where > rulename='_RETszallitolevel_tetele_ervenyes') as view_oid > from pg_views where viewname = 'szallitolevel_tetele_ervenyes'; > > => view_oid is 133652. > > > SELECT definition as viewdef, > (select oid from pg_rewrite where > rulename='_RET' || 'szallitolevel_tetele_ervenyes') as view_oid > from pg_views where viewname = 'szallitolevel_tetele_ervenyes'; > > => view_oid is NULL I get the same result in 7.1 final. Tom, isn't this in relation with my complex query you solved yesterday? Zoltan
Kovacs Zoltan <kovacsz@pc10.radnoti-szeged.sulinet.hu> writes:
> On Fri, 11 May 2001, Philip Warner wrote:
>> Can anyone suggest why this might be happening (I think it's in 7.1b4):
>>
>> SELECT definition as viewdef,
>> (select oid from pg_rewrite where
>> rulename='_RETszallitolevel_tetele_ervenyes') as view_oid
>> from pg_views where viewname = 'szallitolevel_tetele_ervenyes';
>>
>> => view_oid is 133652.
>>
>>
>> SELECT definition as viewdef,
>> (select oid from pg_rewrite where
>> rulename='_RET' || 'szallitolevel_tetele_ervenyes') as view_oid
>> from pg_views where viewname = 'szallitolevel_tetele_ervenyes';
>>
>> => view_oid is NULL
> I get the same result in 7.1 final. Tom, isn't this in relation with my
> complex query you solved yesterday?
Not in that form --- there isn't any parameter being passed down to the
subquery. What plan does EXPLAIN show for the failing query?
regards, tom lane
Philip Warner <pjw@rhyme.com.au> writes:
> Can anyone suggest why this might be happening (I think it's in 7.1b4):
Can't duplicate in current sources:
regression=# SELECT definition as viewdef,
regression-# (select oid from pg_rewrite where
regression(# rulename='_RETstreet') as view_oid
regression-# from pg_views where viewname = 'street'; viewdef
|view_oid
-------------------------------------------------------------------------------------------------+----------SELECT
r.name,r.thepath, c.cname FROM ONLY road r, real_city c WHERE (c.outline ## r.thepath); | 4001276
(1 row)
regression=# SELECT definition as viewdef,
regression-# (select oid from pg_rewrite where
regression(# rulename='_RET' || 'street') as view_oid
regression-# from pg_views where viewname = 'street'; viewdef
|view_oid
-------------------------------------------------------------------------------------------------+----------SELECT
r.name,r.thepath, c.cname FROM ONLY road r, real_city c WHERE (c.outline ## r.thepath); | 4001276
(1 row)
What does EXPLAIN show for your two queries? (Maybe you'd better make
it EXPLAIN VERBOSE.)
regards, tom lane
On Thu, 10 May 2001, Tom Lane wrote:
> Philip Warner <pjw@rhyme.com.au> writes:
> > Can anyone suggest why this might be happening (I think it's in 7.1b4):
>
> Can't duplicate in current sources:
>
> regression=# SELECT definition as viewdef,
> regression-# (select oid from pg_rewrite where
> regression(# rulename='_RETstreet') as view_oid
> regression-# from pg_views where viewname = 'street';
> viewdef
> | view_oid
> -------------------------------------------------------------------------------------------------+----------
> SELECT r.name, r.thepath, c.cname FROM ONLY road r, real_city c WHERE (c.outline ## r.thepath); | 4001276
> (1 row)
>
> regression=# SELECT definition as viewdef,
> regression-# (select oid from pg_rewrite where
> regression(# rulename='_RET' || 'street') as view_oid
> regression-# from pg_views where viewname = 'street';
> viewdef
> | view_oid
> -------------------------------------------------------------------------------------------------+----------
> SELECT r.name, r.thepath, c.cname FROM ONLY road r, real_city c WHERE (c.outline ## r.thepath); | 4001276
> (1 row)
>
> What does EXPLAIN show for your two queries? (Maybe you'd better make
> it EXPLAIN VERBOSE.)
I attached both.
Kov\'acs, Zolt\'an kovacsz@pc10.radnoti-szeged.sulinet.hu
http://www.math.u-szeged.hu/~kovzol ftp://pc10.radnoti-szeged.sulinet.hu/home/kovacsz
See my prior reply to Philip: the problem is that the given string is
longer than NAMEDATALEN. When you writerulename = 'foo'
(rulename is of type NAME) the untyped literal string 'foo' gets coerced
to NAME, ie truncated to fit, and all is well. When you writerulename = ('foo' || 'bar')
the result of the || operator is type TEXT, so instead rulename is
converted to TEXT and a text comparison is performed. In this case the
righthand value is not truncated and so the match will always fail.
regards, tom lane