Re: cannot EXPLAIN query... - Mailing list pgsql-sql

From Rajesh Kumar Mallah.
Subject Re: cannot EXPLAIN query...
Date
Msg-id 200302032108.23554.mallah@trade-india.com
Whole thread Raw
In response to Re: cannot EXPLAIN query...  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: cannot EXPLAIN query...  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-sql
It is PostgreSQL 7.3.0 on Linux.

Sorry Postgresql has really made my VIEWS  ugly.
It wasnt' so when i fed them.

I wish pgsql stores the create view defination some day ,
just like it does for indexes (pg_get_indexdef)



Here is the EXPLAIN ANALYZE output of a query that is working
on the view.

i find that whenever i put any filter expression on the select
for any feild it stops working.



tradein_clients=# explain analyze SELECT  *  from shippers1  ;
                                                                    QUERY PLAN 

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Hash
Join (cost=31.67..26780.73 rows=2 width=339) (actual time=45.18..6072.38 rows=732 loops=1)  Hash Cond: ("outer".id =
"inner".id) Join Filter: ("inner".source = "outer".source)  ->  Subquery Scan b  (cost=0.00..26737.99 rows=492
width=307)(actual time=0.14..6015.04 rows=2293 loops=1)        ->  Append  (cost=0.00..26737.99 rows=492 width=307)
(actualtime=0.13..6001.13 rows=2293 loops=1)              ->  Subquery Scan "*SELECT* 1"  (cost=0.00..6739.42 rows=249
width=307)(actual time=0.12..2982.18 rows=321 loops=1)                    ->  Index Scan using eyp_listing_category_id,
eyp_listing_category_id,eyp_listing_category_id, eyp_listing_category_id, eyp_listing_category_id on eyp_listing
(cost=0.00..6739.42rows=249 width=307) (actual time=0.11..2979.18 rows=321 loops=1)                          Index
Cond:((category_id = 1142) OR (category_id = 1143) OR (category_id = 1145) OR (category_id = 1259) OR (category_id =
1161))                         Filter: ((amount > 0) AND (status = 'a'::character varying) AND (email IS NOT NULL))
        ->  Subquery Scan "*SELECT* 2"  (cost=0.00..9288.33 rows=77 width=286) (actual time=0.65..162.03 rows=112
loops=1)                   ->  Seq Scan on iid_listing  (cost=0.00..9288.33 rows=77 width=286) (actual
time=0.63..161.02rows=112 loops=1)                          Filter: (((category_id = 1142) OR (category_id = 1143) OR
(category_id= 1145) OR (category_id = 1259) OR (category_id = 1161)) AND (amount > 0) AND (status = 'a'::character
varying)AND (email IS NOT NULL))              ->  Subquery Scan "*SELECT* 3"  (cost=10701.96..10710.24 rows=166
width=248)(actual time=2824.89..2851.45 rows=1860 loops=1)                    ->  Unique  (cost=10701.96..10710.24
rows=166width=248) (actual time=2824.86..2837.43 rows=1860 loops=1)                          ->  Sort
(cost=10701.96..10706.10rows=1656 width=248) (actual time=2824.85..2831.21 rows=2790 loops=1)
    Sort Key: branding_master.company_id                                ->  Hash Join  (cost=339.35..10613.44 rows=1656
width=248)(actual time=33.62..2798.98 rows=2790 loops=1)                                      Hash Cond:
("outer".company_id= "inner".company_id)                                      ->  Seq Scan on branding_master
(cost=0.00..7171.80rows=36254 width=242) (actual time=0.07..2620.57 rows=38766 loops=1)
          Filter: ((old_company_id = 0) AND (status = 'a'::character varying) AND (email IS NOT NULL))
                   ->  Hash  (cost=331.00..331.00 rows=3339 width=6) (actual time=32.92..32.92 rows=0 loops=1)
                                 ->  Seq Scan on branding_sp_category  (cost=0.00..331.00 rows=3339 width=6) (actual
time=0.06..26.18rows=3892 loops=1)                                                  Filter: ((category_id = 1142) OR
(category_id= 1143) OR (category_id = 1145) OR (category_id = 1259) OR (category_id = 1161))  ->  Hash
(cost=29.74..29.74rows=774 width=15) (actual time=43.78..43.78 rows=0 loops=1)        ->  Seq Scan on approved_profiles
a (cost=0.00..29.74 rows=774 width=15) (actual time=40.64..42.36 rows=778 loops=1)Total runtime: 6074.86 msec 
(26 rows)

Time: 7080.76 ms
tradein_clients=#


And Following are the VIEWS & Tables:




tradein_clients=# \d shippers1     View "shipping_corner.shippers1"
+----------+-------------------+-----------+
|  Column  |       Type        | Modifiers |
+----------+-------------------+-----------+
| co_name  | character varying |           |
| address  | character varying |           |
| city     | character varying |           |
| pin_code | character varying |           |
| phone    | character varying |           |
| fax      | character varying |           |
| contact  | character varying |           |
| email    | character varying |           |
| size     | character varying |           |
| paid     | boolean           |           |
+----------+-------------------+-----------+
View definition: SELECT b.co_name, b.address, b.city, b.pin_code, b.phone, b.fax, b.contact, b.email, b.size, CASE WHEN
(b.size= 'BRANDING'::character varying) THEN false ELSE true END AS paid FROM (ONLY approved_profiles a JOIN ONLY
shipping_candidate_profilesb  
ON (((a.id = b.id) AND (a.source = b.source))));


tradein_clients=# \d shipping_candidate_profiles
View "shipping_corner.shipping_candidate_profiles"
+-------------+-------------------+-----------+
|   Column    |       Type        | Modifiers |
+-------------+-------------------+-----------+
| id          | integer           |           |
| branch      | character varying |           |
| source      | character varying |           |
| co_name     | character varying |           |
| address     | character varying |           |
| city        | character varying |           |
| pin_code    | character varying |           |
| phone       | character varying |           |
| fax         | character varying |           |
| contact     | character varying |           |
| email       | character varying |           |
| size        | character varying |           |
| status      | boolean           |           |
| category_id | integer           |           |
| keywords    | text              |           |
| edition     | smallint          |           |
| sno         | integer           |           |
+-------------+-------------------+-----------+
View definition: ((((SELECT eyp_listing.list_id AS id, eyp_listing.branch, 'EYP'::character varying AS source,
eyp_listing.co_name,((((CASE WHEN (eyp_listing.address1 IS NOT NULL) THEN eyp_listing.address1 WHEN ('' IS NOT NULL)
THEN''::character varying ELSE NULL::character varying END || ' '::character varying) || CASE WHEN
(eyp_listing.address2IS NOT NULL) THEN eyp_listing.address2 WHEN ('' IS NOT NULL) THEN ''::character varying ELSE
NULL::charactervarying END) || ' '::character varying) || CASE WHEN (eyp_listing.address3 IS NOT NULL) THEN
eyp_listing.address3WHEN ('' IS NOT NULL) THEN ''::character varying ELSE NULL::character varying END) AS address,
eyp_listing.city,eyp_listing.pin_code, eyp_listing.phone, eyp_listing.fax, eyp_listing.contact, eyp_listing.email,
eyp_listing.size,true AS status, eyp_listing.category_id, eyp_listing.keywords, eyp_listing.edition, eyp_listing.sno
FROMONLY public.eyp_listing WHERE ((((((((eyp_listing.category_id = 1142) OR (eyp_listing.category_id = 1143)) OR
(eyp_listing.category_id= 1145)) OR (eyp_listing.category_id = 1259)) OR (eyp_listing.category_id = 1161)) AND
(eyp_listing.amount> 0)) AND (eyp_listing.status = 'a'::character varying)) AND (eyp_listing.email IS NOT NULL))) UNION
ALL(SELECT iid_listing.list_id AS id, iid_listing.branch, 'IID'::character varying AS source, iid_listing.co_name,
((((CASEWHEN (iid_listing.address1 IS NOT NULL) THEN iid_listing.address1 WHEN ('' IS NOT NULL) THEN ''::character
varyingELSE NULL::character varying END || ' '::character varying) || CASE WHEN (iid_listing.address2 IS NOT NULL) THEN
iid_listing.address2WHEN ('' IS NOT NULL) THEN ''::character varying ELSE NULL::character varying END) || '
'::charactervarying) || CASE WHEN (iid_listing.address3 IS NOT NULL) THEN iid_listing.address3 WHEN ('' IS NOT NULL)
THEN''::character varying ELSE NULL::character varying END) AS address, iid_listing.city, iid_listing.pin_code,
iid_listing.phone,iid_listing.fax, iid_listing.contact, iid_listing.email, iid_listing.size, true AS status,
iid_listing.category_id,iid_listing.keywords, iid_listing.edition, iid_listing.sno FROM ONLY public.iid_listing WHERE
((((((((iid_listing.category_id= 1142) OR (iid_listing.category_id = 1143)) OR (iid_listing.category_id = 1145)) OR
(iid_listing.category_id= 1259)) OR (iid_listing.category_id = 1161)) AND (iid_listing.amount > 0)) AND
(iid_listing.status= 'a'::character varying)) AND (iid_listing.email IS NOT NULL))))) UNION ALL (SELECT DISTINCT ON
(company_id)company_id AS id, trade_india_branch AS branch, 'BRANDING'::character varying AS source, comp_name AS
co_name,office_addr AS address, city, pincode AS pin_code, phone_no AS phone, fax_no AS fax, key_exec AS contact,
email,'BRANDING' AS size, false AS status, category_id, serv_prov AS keywords, branding_master.edition, 0 AS sno FROM
(ONLYpublic.branding_master JOIN ONLY public.branding_sp_category USING (company_id)) WHERE ((((((((category_id = 1142)
OR(category_id = 1143)) OR (category_id = 1145)) OR (category_id = 1259)) OR (category_id = 1161)) AND (old_company_id
=0)) AND (status = 'a'::character varying)) AND (email IS NOT NULL)) ORDER BY company_id)); 




tradein_clients=# \d approved_profiles
Table "shipping_corner.approved_profiles"
+--------+-------------------+-----------+
| Column |       Type        | Modifiers |
+--------+-------------------+-----------+
| id     | integer           | not null  |
| source | character varying | not null  |
+--------+-------------------+-----------+
Indexes: approved_profiles_id_key unique btree (id, source)

tradein_clients=# \d branding_master                                          Table "public.branding_master"
Column      |           Type           |                             Modifiers 

--------------------+--------------------------+--------------------------------------------------------------------company_id
       | integer                  | not null default nextval('"branding_master_company_id_seq"'::text)comp_name
| character varying(100)   |office_addr        | character varying(255)   |phone_no           | character varying(100)
|fax_no             | character varying(100)   |email              | character varying(100)   |website            |
charactervarying(100)   |key_exec           | character varying(255)   |bran               | character varying(100)
|estd              | smallint                 |staff              | integer                  |prod_exp           | text
                   |prod_manu          | text                     |prod_imp           | text
|serv_prov         | text                     |banker_name        | character varying(255)   |email_valid        |
integer                 |currency_ann       | character varying(4)     |old_company_id     | integer                  |
default0currency_exp       | character varying(4)     |old_formno         | integer                  |currency_imp
| character varying(4)     |imp_exp_code       | character varying(100)   |memb_affl          | character varying(255)
|std_cert           | character varying(255)   |trade_india_branch | character varying(25)    |areacode           |
integer                 | default 0datasource         | smallint                 |status             | character
varying(1)    | default 'p'formno             | integer                  |edition            | smallint
|area              | character varying(50)    |sno                | integer                  |city               |
charactervarying(100)   |pincode            | character varying(20)    |old_edition        | bigint
|has_new_form      | numeric(15,3)            |annual_turn        | numeric(15,2)            |exp_turn           |
numeric(15,2)           |imp_turn           | numeric(15,2)            |generated          | timestamp with time zone |
default"timestamp"('now'::text)operator_code      | character varying(25)    |fts_index          | integer[]
   |eyp_group_id       | integer                  | default 0old_branch         | character varying(20)    |imported
      | boolean                  | default falsecollector          | character varying(255)   |for_delete1        |
boolean                 | default falsefor_delete2        | boolean                  | default falseeyp_exported
|timestamp with time zone |last_updated       | timestamp with time zone | default now()eyp_paid           | integer
             |iid_exported       | timestamp with time zone |iid_paid           | integer                  |delete3
      | character varying(100)   |comp_name_index    | txtidx                   | 
Indexes: branding_master_pkey primary key btree (company_id),        branding_master_formno_ed_branc unique btree
(formno,edition, trade_india_branch),        branding_master_name_city unique btree (comp_name, city) WHERE
(old_company_id= 0),        branding_master_area btree (area),        branding_master_areacode btree (areacode),
branding_master_branchbtree (trade_india_branch),        branding_master_comp_name btree (comp_name),
branding_master_comp_name_indexgist (comp_name_index),        branding_master_edition btree (edition),
branding_master_emailbtree (email) WHERE ((old_company_id = 0) AND (email IS NOT NULL)),
branding_master_oldcomapany_idbtree (old_company_id) WHERE (old_company_id > 0),        branding_master_pincode btree
(pincode),       branding_master_status btree (status),        branding_master_tibranch btree (trade_india_branch),
  branding_master_website btree (website) 
Check constraints: "no_whites_paceallowed_in_imp" ((length(btrim(prod_imp)) > 1) OR (prod_imp IS NULL))
"no_whites_paceallowed_in_email" ((length(btrim((email)::text)) > 1) OR (email IS NULL))
"no_white_space_allowed_in_serv"((length(btrim(serv_prov)) > 1) OR (serv_prov IS NULL))
"no_white_space_allowed_in_manu"((length(btrim(prod_manu)) > 1) OR (prod_manu IS NULL))
"no_white_space_allowed_in_exp"((length(btrim(prod_exp)) > 1) OR (prod_exp IS NULL)) 

tradein_clients=#
tradein_clients=# \d eyp_listing                                        Table "public.eyp_listing"      Column       |
        Type           |                          Modifiers 
--------------------+--------------------------+-------------------------------------------------------------userid
       | integer                  |category           | character varying(50)    |category_id        | integer
       | not nullbranch             | character varying        |sno                | integer                  | default
-1size              | character varying(20)    |co_name            | character varying(100)   | not nulladdress1
  | character varying(200)   |address2           | character varying(200)   | default ' 'address3           | character
varying(200)  | default ' 'city               | character varying(100)   |pin_code           | character varying(30)
|phone             | character varying(100)   |fax                | character varying(100)   |email              |
charactervarying(100)   |contact            | character varying(100)   |website            | character varying(100)
|keywords          | text                     |show_ad            | character varying(25)    | default 'f'status
    | character varying(200)   | default 'a'amount             | integer                  |group_id           | integer
                | default nextval('"eyp_listing_group_id_seq"'::text)list_id            | integer                  |
notnull default nextval('"eyp_listing_list_id_seq"'::text)catalog_id         | integer                  | default
0generated         | date                     | default date('now'::text)edition            | smallint
|wrong_last_updated| date                     |last_updated       | timestamp with time zone | default
now()user_keywords     | text                     |counter            | smallint                 | default 0sent_on
      | timestamp with time zone | default now()max_emails         | smallint                 |emails_sent        |
smallint                | default 0total_emails       | smallint                 | default 0notification       |
boolean                 |branding_id        | integer                  |keywordidx         | txtidx
|company_id        | integer                  |website_working    | boolean                  | default 'f'hide_email
    | boolean                  | default 'f'co_name_index      | txtidx                   |bankers            |
charactervarying(200)   |estd               | integer                  |staff              | integer
|annual_turn_value | numeric                  |mobile             | character varying(50)    |reminder_cnt       |
smallint                | default 0expires_on         | date                     | 
Indexes: eyp_listing_pkey primary key btree (list_id),        eyp_listing_br_cid_cat_id unique btree (company_id,
category_id)WHERE (size = 'BRANDING'::character varying),        a_gist_key gist (keywordidx),        eyp_listing_amt
btree(amount),        eyp_listing_branch btree (branch) WHERE (amount > 0),        eyp_listing_category_id btree
(category_id),       eyp_listing_co_name btree (co_name),        eyp_listing_co_name_index gist (co_name_index),
eyp_listing_company_idbtree (company_id),        eyp_listing_email btree (email),        eyp_listing_group_id btree
(group_id),       eyp_listing_size btree (size),        eyp_listing_sno_branch btree (branch, sno),
eyp_listing_useridbtree (userid) 
Check constraints: "branding_check" CASE WHEN (size = 'BRANDING'::character varying) THEN ((company_id IS NOT NULL) AND
(company_id> 0)) ELSE (company_id IS NULL) END 
Foreign Key constraints: referrer_branches_master FOREIGN KEY (branch) REFERENCES tradeindia_branches(branch) ON UPDATE
NOACTION ON DELETE NO ACTION 
Triggers: RI_ConstraintTrigger_29292778,         RI_ConstraintTrigger_29292779,         co_name_index_update,
last_updated,        set_category,         set_max_emails 

tradein_clients=#

tradein_clients=# \d eyp_listing                                        Table "public.eyp_listing"      Column       |
        Type           |                          Modifiers 
--------------------+--------------------------+-------------------------------------------------------------userid
       | integer                  |category           | character varying(50)    |category_id        | integer
       | not nullbranch             | character varying        |sno                | integer                  | default
-1size              | character varying(20)    |co_name            | character varying(100)   | not nulladdress1
  | character varying(200)   |address2           | character varying(200)   | default ' 'address3           | character
varying(200)  | default ' 'city               | character varying(100)   |pin_code           | character varying(30)
|phone             | character varying(100)   |fax                | character varying(100)   |email              |
charactervarying(100)   |contact            | character varying(100)   |website            | character varying(100)
|keywords          | text                     |show_ad            | character varying(25)    | default 'f'status
    | character varying(200)   | default 'a'amount             | integer                  |group_id           | integer
                | default nextval('"eyp_listing_group_id_seq"'::text)list_id            | integer                  |
notnull default nextval('"eyp_listing_list_id_seq"'::text)catalog_id         | integer                  | default
0generated         | date                     | default date('now'::text)edition            | smallint
|wrong_last_updated| date                     |last_updated       | timestamp with time zone | default
now()user_keywords     | text                     |counter            | smallint                 | default 0sent_on
      | timestamp with time zone | default now()max_emails         | smallint                 |emails_sent        |
smallint                | default 0total_emails       | smallint                 | default 0notification       |
boolean                 |branding_id        | integer                  |keywordidx         | txtidx
|company_id        | integer                  |website_working    | boolean                  | default 'f'hide_email
    | boolean                  | default 'f'co_name_index      | txtidx                   |bankers            |
charactervarying(200)   |estd               | integer                  |staff              | integer
|annual_turn_value | numeric                  |mobile             | character varying(50)    |reminder_cnt       |
smallint                | default 0expires_on         | date                     | 
Indexes: eyp_listing_pkey primary key btree (list_id),        eyp_listing_br_cid_cat_id unique btree (company_id,
category_id)WHERE (size = 'BRANDING'::character varying),        a_gist_key gist (keywordidx),        eyp_listing_amt
btree(amount),        eyp_listing_branch btree (branch) WHERE (amount > 0),        eyp_listing_category_id btree
(category_id),       eyp_listing_co_name btree (co_name),        eyp_listing_co_name_index gist (co_name_index),
eyp_listing_company_idbtree (company_id),        eyp_listing_email btree (email),        eyp_listing_group_id btree
(group_id),       eyp_listing_size btree (size),        eyp_listing_sno_branch btree (branch, sno),
eyp_listing_useridbtree (userid) 
Check constraints: "branding_check" CASE WHEN (size = 'BRANDING'::character varying) THEN ((company_id IS NOT NULL) AND
(company_id> 0)) ELSE (company_id IS NULL) END 
Foreign Key constraints: referrer_branches_master FOREIGN KEY (branch) REFERENCES tradeindia_branches(branch) ON UPDATE
NOACTION ON DELETE NO ACTION 
Triggers: RI_ConstraintTrigger_29292778,         RI_ConstraintTrigger_29292779,         co_name_index_update,
last_updated,        set_category,         set_max_emails 

tradein_clients=#












On Monday 03 February 2003 08:16 pm, Tom Lane wrote:
> "Rajesh Kumar Mallah." <mallah@trade-india.com> writes:
> > tradein_clients=# explain  SELECT count(*) from shippers1 where
> > city='DELHI'; ERROR:  get_names_for_var: bogus varno 5
>
> What version is this?  ISTR having fixed some bugs that might cause that.
>
> > i can paste the nasty view definations if nothing is obvious till
> > now.
>
> If it's a current release, we need to see *all* the schema definitions
> referenced by the query --- views and tables.
>
>             regards, tom lane
>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org

--


--------------------------------------------                               Regds Mallah
Rajesh Kumar Mallah,
Project Manager (Development)
Infocom Network Limited, New Delhi
phone: +91(11)26152172 (221) (L) 9811255597 (M)
Visit http://www.trade-india.com ,
India's Leading B2B eMarketplace.




pgsql-sql by date:

Previous
From: Tom Lane
Date:
Subject: Re: cannot EXPLAIN query...
Next
From: Tom Lane
Date:
Subject: Re: cannot EXPLAIN query...