Обсуждение: Is this a bug in 7.1?
Is this a bug or missing feature in 7.1? or have I got the SQL wrong? bray=# SELECT DISTINCT p.id, p.name, a.town bray-# FROM ( bray(# SELECT id, name bray(# FROM customer bray(# UNION bray(# SELECT id, name bray(# FROM supplier bray(# ) AS p bray-# LEFT OUTER JOIN address AS a bray-# ON p.address = a.id bray-# WHERE p.id = '22002'; ERROR: function applied to tuple is not supported for subSELECTs What does the error message mean? I can't see where a function is involved. -- Oliver Elphick Oliver.Elphick@lfix.co.uk Isle of Wight http://www.lfix.co.uk/oliver PGP: 1024R/32B8FAA1: 97 EA 1D 47 72 3F 28 47 6B 7E 39 CC 56 E4 C1 47 GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839 932A 614D 4C34 3E1D 0C1C ======================================== "Who is like Thee among the gods, O Lord? Who is like Thee, majestic in holiness, awesome in praises, working wonders?" Exodus 15:11
"Oliver Elphick" wrote: >Is this a bug or missing feature in 7.1? or have I got the SQL >wrong? > >bray=# SELECT DISTINCT p.id, p.name, a.town >bray-# FROM ( >bray(# SELECT id, name >bray(# FROM customer >bray(# UNION >bray(# SELECT id, name >bray(# FROM supplier >bray(# ) AS p >bray-# LEFT OUTER JOIN address AS a >bray-# ON p.address = a.id >bray-# WHERE p.id = '22002'; The SQL was wrong; I had missed out "address" from the fields in the subselect. However, the error message was very misleading: >ERROR: function applied to tuple is not supported for subSELECTs > >What does the error message mean? I can't see where a function >is involved. -- Oliver Elphick Oliver.Elphick@lfix.co.uk Isle of Wight http://www.lfix.co.uk/oliver PGP: 1024R/32B8FAA1: 97 EA 1D 47 72 3F 28 47 6B 7E 39 CC 56 E4 C1 47 GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839 932A 614D 4C34 3E1D 0C1C ======================================== "Who is like Thee among the gods, O Lord? Who is like Thee, majestic in holiness, awesome in praises, working wonders?" Exodus 15:11
From: "Oliver Elphick" <olly@lfix.co.uk>
> "Oliver Elphick" wrote:
> >Is this a bug or missing feature in 7.1? or have I got the SQL
> >wrong?
> >
> >bray=# SELECT DISTINCT p.id, p.name, a.town
> >bray-# FROM (
> >bray(# SELECT id, name
> >bray(# FROM customer
> >bray(# UNION
> >bray(# SELECT id, name
> >bray(# FROM supplier
> >bray(# ) AS p
> >bray-# LEFT OUTER JOIN address AS a
> >bray-# ON p.address = a.id
> >bray-# WHERE p.id = '22002';
>
> The SQL was wrong; I had missed out "address" from the fields in the
> subselect. However, the error message was very misleading:
>
> >ERROR: function applied to tuple is not supported for subSELECTs
> >
> >What does the error message mean? I can't see where a function
> >is involved.
Misleading, but does make some sense. Looks like you can define a function
with a table-name as parameter and use it as though an attribute:
create function foo(tbl) returns...
select tbl.foo;
Seems to call the function foo(...) - something to do with defining your own
types?
- Richard Huxton
"Oliver Elphick" <olly@lfix.co.uk> writes:
> bray=# SELECT DISTINCT p.id, p.name, a.town
> bray-# FROM (
> bray(# SELECT id, name
> bray(# FROM customer
> bray(# UNION
> bray(# SELECT id, name
> bray(# FROM supplier
> bray(# ) AS p
> bray-# LEFT OUTER JOIN address AS a
> bray-# ON p.address = a.id
> bray-# WHERE p.id = '22002';
> ERROR: function applied to tuple is not supported for subSELECTs
> What does the error message mean?
table.functionname is an ancient PostQUEL notation for functions that
take whole tuples --- think "address(p)" and you'll have a better idea
what the parser is seeing here.
This notation is something we're probably going to have to retire soon,
since I doubt it will play well with schema notation (too hard to guess
what foo.bar.baz means). I doubt anyone but the regression tests still
use the PostQUEL notation for function calls anyway.
regards, tom lane