| From: | Richard Ray <rray(at)mstc(dot)state(dot)ms(dot)us> | 
|---|---|
| To: | pgsql-sql(at)postgresql(dot)org | 
| Subject: | Query is fast and function is slow | 
| Date: | 2006-12-06 15:44:45 | 
| Message-ID: | Pine.LNX.4.64.0612060934410.15200@rray.drdc.mstc.ms.gov | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-sql | 
The query
select count(*) from documents where doc_num = '106973821'  and (select 
bit_or(group_access) from mda_groups where group_name in (select groname 
from pg_user,pg_group where usename =  'bbob'  and usesysid = any(grolist) 
and (groname ~ '.*owner$' or groname = 'admin'))) & access > 
'0'::bit(100);
returns very fast
If I create function
create or replace function check_for_update_permission(text,text) returns 
boolean as '
declare
   doc_number alias for $1;
   user alias for $2;
   doc_count integer;
begin
   select count(*) into doc_count from documents where doc_num = doc_number 
and (select bit_or(group_access) from mda_groups where group_name in 
(select groname from pg_user,pg_group where usename = user and usesysid = 
any(grolist) and (groname ~ ''.*owner$'' or groname = ''admin''))) & 
access > ''0''::bit(100);
   if doc_count > 0 then
     return(true);
   end if;
return(false);
end;
' language 'plpgsql';
and run "select check_for_update_permission('106973821','bbob');"
it returns the correct info but takes several minutes
Would someone please enlighten me.
Can you do something like explain analyze on a function
Thanks
Richard
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Rajesh Kumar Mallah | 2006-12-06 17:39:23 | Re: Proper way of iterating over the column names in a trigger function. [ SOLVED] | 
| Previous Message | Tom Lane | 2006-12-06 15:02:16 | Re: Proper way of iterating over the column names in a trigger function. |