pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
bug in 9.2.2 ? subquery accepts wrong column name : upd
3+ messages / 2 participants
[nested] [flat]

* bug in 9.2.2 ? subquery accepts wrong column name : upd
@ 2013-03-14 15:29  Achilleas Mantzios <achill@matrix.gatewaynet.com>
  0 siblings, 1 reply; 3+ messages in thread

From: Achilleas Mantzios @ 2013-03-14 15:29 UTC (permalink / raw)
  To: pgsql-sql

dynacom=# SELECT DISTINCT ON (qry.setid) qry.setid, qry.arragg[1:2] FROM 
	(select distinct sst.setid,(array_agg(vsl.name) OVER (PARTITION BY sst.setid ORDER BY character_length(vsl.name))) as arragg 
	FROM sissets sst, vessels vsl WHERE vsl.id=sst.vslid ORDER BY sst.setid) as qry 
     WHERE array_length(qry.arragg,1)>1  AND qry.setid IN (SELECT setid from sis_oper_cons) ORDER BY qry.setid,array_length(qry.arragg,1);
 setid |              arragg              
-------+----------------------------------
    54 | {EQUZZZ,SAMZZZ}
    55 | {"ZZZR","ZZZTRAVEL"}
    81 | {"ZZZ SISTER","ZZZ DUMMY II"}
(3 rows)

however, there is not column setid in sis_oper_cons,

dynacom=# SELECT setid from sis_oper_cons;
ERROR:  column "setid" does not exist
LINE 1: SELECT setid from sis_oper_cons;
               ^
9.2.2 Postgresql treats qry.setid IN (SELECT setid from sis_oper_cons) as true.
However, making subquery look like (SELECT soc.setid from sis_oper_cons soc), as in 

dynacom=# SELECT DISTINCT ON (qry.setid) qry.setid, qry.arragg[1:2] FROM (select distinct sst.setid,(array_agg(vsl.name) OVER (PARTITION BY sst.setid ORDER BY character_length(vsl.name))) as arragg FROM sissets sst, vessels vsl WHERE vsl.id=sst.vslid ORDER BY sst.setid) as qry WHERE array_length(qry.arragg,1)>1  AND qry.setid NOT IN (SELECT soc.setid from sis_oper_cons soc) ORDER BY qry.setid,array_length(qry.arragg,1);
ERROR:  column soc.setid does not exist
LINE 1: ...gth(qry.arragg,1)>1  AND qry.setid NOT IN (SELECT soc.setid ...
                                                             ^
dynacom=# 

postgresql corerctly identifies and throws the error.

-
Achilleas Mantzios
IT DEV
IT DEPT
Dynacom Tankers Mgmt


-- 
Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql



^ permalink  raw  reply  [nested|flat] 3+ messages in thread

* Re: bug in 9.2.2 ? subquery accepts wrong column name : upd
@ 2013-03-14 16:17  Tom Lane <tgl@sss.pgh.pa.us>
  parent: Achilleas Mantzios <achill@matrix.gatewaynet.com>
  0 siblings, 1 reply; 3+ messages in thread

From: Tom Lane @ 2013-03-14 16:17 UTC (permalink / raw)
  To: Achilleas Mantzios <achill@matrix.gatewaynet.com>; +Cc: pgsql-sql

Achilleas Mantzios <achill@matrix.gatewaynet.com> writes:
> dynacom=# SELECT DISTINCT ON (qry.setid) qry.setid, qry.arragg[1:2] FROM 
> 	(select distinct sst.setid,(array_agg(vsl.name) OVER (PARTITION BY sst.setid ORDER BY character_length(vsl.name))) as arragg 
> 	FROM sissets sst, vessels vsl WHERE vsl.id=sst.vslid ORDER BY sst.setid) as qry 
>      WHERE array_length(qry.arragg,1)>1  AND qry.setid IN (SELECT setid from sis_oper_cons) ORDER BY qry.setid,array_length(qry.arragg,1);
> [ works ]

> however, there is not column setid in sis_oper_cons,

If not, that's a perfectly legal outer reference to qry.setid.

Probably not one of SQL's better design features, since it confuses
people regularly; but it's required by spec to work like that.

			regards, tom lane


-- 
Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql



^ permalink  raw  reply  [nested|flat] 3+ messages in thread

* Re: bug in 9.2.2 ? subquery accepts wrong column name : upd
@ 2013-03-15 07:49  Achilleas Mantzios <achill@matrix.gatewaynet.com>
  parent: Tom Lane <tgl@sss.pgh.pa.us>
  0 siblings, 0 replies; 3+ messages in thread

From: Achilleas Mantzios @ 2013-03-15 07:49 UTC (permalink / raw)
  To: pgsql-sql

Thanx Tom.

On Πεμ 14 Μαρ 2013 12:17:46 Tom Lane wrote:
> Achilleas Mantzios <achill@matrix.gatewaynet.com> writes:
> > dynacom=# SELECT DISTINCT ON (qry.setid) qry.setid, qry.arragg[1:2] FROM 
> > 	(select distinct sst.setid,(array_agg(vsl.name) OVER (PARTITION BY sst.setid ORDER BY character_length(vsl.name))) as arragg 
> > 	FROM sissets sst, vessels vsl WHERE vsl.id=sst.vslid ORDER BY sst.setid) as qry 
> >      WHERE array_length(qry.arragg,1)>1  AND qry.setid IN (SELECT setid from sis_oper_cons) ORDER BY qry.setid,array_length(qry.arragg,1);
> > [ works ]
> 
> > however, there is not column setid in sis_oper_cons,
> 
> If not, that's a perfectly legal outer reference to qry.setid.
> 
> Probably not one of SQL's better design features, since it confuses
> people regularly; but it's required by spec to work like that.
> 
> 			regards, tom lane
> 
> 
> 
-
Achilleas Mantzios
IT DEV
IT DEPT
Dynacom Tankers Mgmt


-- 
Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql



^ permalink  raw  reply  [nested|flat] 3+ messages in thread


end of thread, other threads:[~2013-03-15 07:49 UTC | newest]

Thread overview: 3+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2013-03-14 15:29 bug in 9.2.2 ? subquery accepts wrong column name : upd Achilleas Mantzios <achill@matrix.gatewaynet.com>
2013-03-14 16:17 ` Tom Lane <tgl@sss.pgh.pa.us>
2013-03-15 07:49   ` Achilleas Mantzios <achill@matrix.gatewaynet.com>

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox