Re: variable not found in subplan target list? + test case - Mailing list pgsql-bugs

From Klint Gore
Subject Re: variable not found in subplan target list? + test case
Date
Msg-id 3FC2A4A715F.EDF2KG@129.180.47.120
Whole thread Raw
In response to Re: variable not found in subplan target list?  (Stephan Szabo <sszabo@megazone.bigpanda.com>)
Responses Re: variable not found in subplan target listS? + test case  (Klint Gore <kg@kgb.une.edu.au>)
Re: variable not found in subplan target list? + test case  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-bugs
On Sun, 23 Nov 2003 22:48:17 -0800 (PST), Stephan Szabo <sszabo@megazone.bigpanda.com> wrote:
> On Mon, 24 Nov 2003, Klint Gore wrote:
>
> > I've got the message "ERROR:  variable not found in subplan target lists"
> > when I have a union between 2 views.  Both selects from the views run
> > without the union.  Same result using intersect and except.  Same result
> > using any of them with the all qualifier.  Explain of the union gives
> > the error, explain of each individual select gives a result.
> >
> > The view definitions contain unions and cross joins.
> >
> > The error still occurs if I simplify the selects down to
> >
> >    select 'abc' from view1
> >    union
> >    select 'cba' from view2
> >
> > "PostgreSQL 7.4 on i686-pc-linux-gnu, compiled by GCC 2.96"
> > redhat 7.2 (2.4.7-10)
>
> Can you send a test case with table and view definitions, it's hard to
> generate one from just the information above.

ok.  the last select generates the error.  I used pgadmin3 and did
create database and only gave it a name.  Then opened a sql window and
ran the creates.  Then ran the final select and the error happened.  I
didnt put any data in the tables.

This test I ran on w2k(server) sp4, using "PostgreSQL 7.4 on
i686-pc-cygwin, compiled by GCC gcc (GCC) 3.2 20020927 (prerelease)"

Same result on the linux from first post.

---- SETUP -------------------------------
CREATE TABLE "component_params" (
    "soc_code" character varying(7) NOT NULL,
    "form_name" character varying(64) NOT NULL,
    "com_name" character varying(64) NOT NULL,
    "com_label" character varying(64),
    "com_data_type" character varying(1) DEFAULT 'V',
    "com_type" character varying(3),
    "com_enabled" character varying(1) DEFAULT 'Y',
    "com_enable_on_add" character varying(1) DEFAULT 'Y',
    "com_visible" character varying(1) DEFAULT 'Y',
    "com_default_value" character varying(64),
    "com_min_value" numeric(12,4) DEFAULT 0,
    "com_max_value" numeric(12,4) DEFAULT 0,
    "com_min_length" integer DEFAULT 0,
    "com_max_length" integer DEFAULT 0,
    "com_case" character varying(1) DEFAULT 'U',
    "com_unique" boolean DEFAULT 'f'::bool,
    "com_align" character varying(1) DEFAULT 'L',
    "com_top" integer DEFAULT 0,
    "com_left" integer DEFAULT 0,
    "com_width" integer DEFAULT 0,
    "com_hint_level" integer DEFAULT 1,
    "com_reqd" character varying(1) DEFAULT 'N',
    "com_pair_name" character varying(64),
    "com_pair_type" character varying(1),
    "com_pair_null_values" character varying(32),
    "com_combo_size" integer,
    "com_hint" character varying(255),
    "com_label_hint" character varying(255),
    "com_default_sql" text,
    "com_combo_sql" text,
    "com_reqd_sql" character varying(255),
    "com_help" text,
    "create_method" integer,
    "create_date" timestamp(0) with time zone,
    "create_user_id" character varying(8),
    "last_upd_method" integer,
    "last_upd_date" timestamp(0) with time zone,
    "last_upd_user_id" character varying(8),
    Constraint "component_params_pkey" Primary Key ("soc_code", "form_name", "com_name")
);


CREATE TABLE "societies" (
    "soc_code" character varying(7) NOT NULL,
    "soc_short_name" character varying(32),
    "soc_package_list" character varying,
    "create_date" timestamp with time zone,
    "create_user_id" character varying(8),
    "last_upd_date" timestamp with time zone,
    "last_upd_user_id" character varying(8),
    Constraint "societies_pkey" Primary Key ("soc_code")
);


create view component_params_v as
 select
    soc_code,
        form_name,
    com_name,
    com_label,
    com_data_type,
    com_type,
    com_enabled,
    com_visible,
    com_default_value,
    com_min_value,
    com_max_value,
    com_min_length,
    com_max_length,
    com_case,
    com_align,
    com_top,
    com_left,
    com_width,
    com_help,
    com_reqd,
    com_pair_name,
    com_pair_type,
    com_pair_null_values,
    com_combo_size,
    com_hint,
    com_label_hint,
    com_default_sql,
    cast(com_combo_sql as text) as com_combo_sql,
    com_reqd_sql,
    create_method,
    create_date,
    create_user_id,
    last_upd_method,
    last_upd_date,
    last_upd_user_id
 from component_params
 where soc_code <> 'GENERIC'
union
 select
    societies.soc_code,
        p.form_name,
    p.com_name,
    p.com_label,
    p.com_data_type,
    p.com_type,
    p.com_enabled,
    p.com_visible,
    p.com_default_value,
    p.com_min_value,
    p.com_max_value,
    p.com_min_length,
    p.com_max_length,
    p.com_case,
    p.com_align,
    p.com_top,
    p.com_left,
    p.com_width,
    p.com_help,
    p.com_reqd,
    p.com_pair_name,
    p.com_pair_type,
    p.com_pair_null_values,
    p.com_combo_size,
    p.com_hint,
    p.com_label_hint,
    p.com_default_sql,
    cast(p.com_combo_sql as text) as com_combo_sql,
    p.com_reqd_sql,
    p.create_method,
    p.create_date,
    p.create_user_id,
    p.last_upd_method,
    p.last_upd_date,
    p.last_upd_user_id

 from component_params p
 cross join societies
 where p.soc_code = 'GENERIC'
 and not exists (select * from component_params p1 where p1.soc_code = societies.soc_code and p1.form_name =
p.form_nameand p1.com_name = p.com_name); 


CREATE TABLE "params" (
    "soc_code" character varying(7) NOT NULL,
    "param_key" character varying(32) NOT NULL,
    "param_code" character varying(12) NOT NULL,
    "param_group_code" character varying(32),
    "param_key_grouping" character varying(32),
    "param_column_name" character varying(32),
    "param_value" integer,
    "param_value2" integer,
    "param_value3" integer,
    "param_date" date,
    "param_date2" date,
    "param_date3" date,
    "param_abbrev" character varying(32),
    "param_desc" character varying(512),
    "param_string" text,
    "param_sort_seq" integer,
    "param_start_date" date,
    "param_end_date" date,
    "create_method" integer,
    "create_date" timestamp(0) with time zone,
    "create_user_id" character varying(8),
    "last_upd_method" integer,
    "last_upd_date" timestamp(0) with time zone,
    "last_upd_user_id" character varying(8),
    Constraint "params_pkey" Primary Key ("soc_code", "param_key", "param_code")
);


create view params_v as

select
    soc_code,
    param_key,
    param_code,
    param_group_code,
    param_key_grouping,
    param_column_name,
    param_value,
    param_value2,
    param_value3,
param_date,
param_date2,
param_date3,
param_abbrev,
param_desc,
param_sort_seq,
param_start_date,
param_end_date,
create_method,
create_date,
create_user_id,
last_upd_method,
last_upd_date,
last_upd_user_id
 from params
where soc_code <> 'GENERIC'
union
select
societies.soc_code,
p.param_key,
p.param_code,
p.param_group_code,
p.param_key_grouping,
p.param_column_name,
p.param_value,
p.param_value2,
p.param_value3,
p.param_date,
p.param_date2,
p.param_date3,
p.param_abbrev,
p.param_desc,
p.param_sort_seq,
p.param_start_date,
p.param_end_date,
p.create_method,
p.create_date,
p.create_user_id,
p.last_upd_method,
p.last_upd_date,
p.last_upd_user_id
 from params p
 cross join societies
where p.soc_code = 'GENERIC'
and not exists (select * from params p1 where p1.soc_code = societies.soc_code and p1.param_key = p.param_key)
and p.param_key <> 'ERRORS'
and p.param_key <> 'MESSAGES'

union

select
societies.soc_code,
p.param_key,
p.param_code,
p.param_group_code,
p.param_key_grouping,
p.param_column_name,
p.param_value,
p.param_value2,
p.param_value3,
p.param_date,
p.param_date2,
p.param_date3,
p.param_abbrev,
p.param_desc,
p.param_sort_seq,
p.param_start_date,
p.param_end_date,
p.create_method,
p.create_date,
p.create_user_id,
p.last_upd_method,
p.last_upd_date,
p.last_upd_user_id
 from params p
 cross join societies
where p.soc_code = 'GENERIC'
and not exists (select * from params p1 where p1.soc_code = societies.soc_code and p1.param_key = p.param_key and
p1.param_code= p.param_code) 
and p.param_key = 'ERRORS'

union

select
societies.soc_code,
p.param_key,
p.param_code,
p.param_group_code,
p.param_key_grouping,
p.param_column_name,
p.param_value,
p.param_value2,
p.param_value3,
p.param_date,
p.param_date2,
p.param_date3,
p.param_abbrev,
p.param_desc,
p.param_sort_seq,
p.param_start_date,
p.param_end_date,
p.create_method,
p.create_date,
p.create_user_id,
p.last_upd_method,
p.last_upd_date,
p.last_upd_user_id
 from params p
 cross join societies
where p.soc_code = 'GENERIC'
and not exists (select * from params p1 where p1.soc_code = societies.soc_code and p1.param_key = p.param_key and
p1.param_code= p.param_code) 
and p.param_key = 'MESSAGES';

---- END SETUP -------------------------------


---- ERROR PRODUCING STATEMENT  -------------------------------

select cast('cp' as varchar(2)) as alias,
soc_code, count(*) as rec_cnt,max(coalesce(last_upd_date, create_date)) as max_upd_date
>from component_params_v
where soc_code in ('ALP') group by soc_code, alias
union
select cast('pa' as varchar(2)) as alias,
soc_code, count(*) as rec_cnt,max(coalesce(last_upd_date, create_date)) as max_upd_date
>from params_v
where soc_code in ('ALP') group by soc_code, alias;

---- END ERROR PRODUCING STATEMENT  -------------------------------


+---------------------------------------+-----------------+
: Klint Gore                            : "Non rhyming    :
: EMail   : kg@kgb.une.edu.au           :  slang - the    :
: Snail   : A.B.R.I.                    :  possibilities  :
: Mail      University of New England   :  are useless"   :
:           Armidale NSW 2351 Australia :     L.J.J.      :
: Fax     : +61 2 6772 5376             :                 :
+---------------------------------------+-----------------+

pgsql-bugs by date:

Previous
From: Stephan Szabo
Date:
Subject: Re: SELECT with MANY tables
Next
From: Klint Gore
Date:
Subject: Re: variable not found in subplan target listS? + test case