If you change the function, you will have to rebuild the index.
create table t (i integer); insert into t (i) select generate_series(1, 100000); analyze t;
A simple function to return the opposite integer:
create or replace function f(i integer) returns integer as $$ select i * -1; $$ immutable language sql;
And the index on it:
create index t_i_index on t(f(i));
Used index:
explain select * from t order by f(i); QUERY PLAN
Now the function is changed to return the whole:
create or replace function f(i integer) returns integer as $$ select i; $$ immutable language sql;
And the index is no longer used:
explain select * from t order by f(i); QUERY PLAN
If the index is rebuilt
reindex index t_i_index;
It is used again:
explain select * from t order by f(i); QUERY PLAN
Clodoaldo neto
source share