Bruce Momjian wrote:
> Karl Denninger wrote:
>   
>>> Yes.  In addition, functions that are part of expression indexes do get
>>> their own optimizer statistics, so it does allow you to get optimizer
>>> stats for your test without having to use booleans.
>>>
>>> I see this documented in the 8.0 release notes:
>>>
>>>      * "ANALYZE" now collects statistics for expression indexes (Tom)
>>>        Expression indexes (also called functional indexes) allow users
>>>        to index not just columns but the results of expressions and
>>>        function calls. With this release, the optimizer can gather and
>>>        use statistics about the contents of expression indexes. This will
>>>        greatly improve the quality of planning for queries in which an
>>>        expression index is relevant.
>>>
>>> Is this in our main documentation somewhere?
>>>
>>>   
>>>       
>> Interesting... declaring this:
>>
>> create function ispermitted(text, integer) returns boolean as $$
>> select permission & $2 = permission from forum where forum.name=$1;
>> $$ Language SQL STABLE;
>>
>> then calling it with "ispermitted(post.forum, '4')" as one of the terms
>> causes the query optimizer to treat it as a FILTER instead of a nested
>> loop, and it works as expected.
>>
>> However, I don't think I can index that - right - since there are two
>> variables involved which are not part of the table being indexed.....
>>     
>
> That should index fine.  It is an _expression_ index so it can be pretty
> complicated
It does not appear I can create an index on that (not that it appears to
be necessary for decent performance)

create index forum_ispermitted on forum using btree(ispermitted(name,
permission));
ERROR:  functions in index expression must be marked IMMUTABLE
ticker=#

The function is of course of class STATIC.

-- Karl


<<attachment: karl.vcf>>

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

Reply via email to