Re: Index selection bug

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Andriy I Pilipenko <bamby(at)marka(dot)net(dot)ua>
Cc: pgsql-bugs(at)postgresql(dot)org
Subject: Re: Index selection bug
Date: 2000-07-26 14:27:21
Message-ID: 10680.964621641@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

Andriy I Pilipenko <bamby(at)marka(dot)net(dot)ua> writes:
> create function func() returns int as 'select 1' language 'sql';

> set enable_seqscan to 'off';

> explain select * from t where f = 1;

> Index Scan using i on t (cost=0.00..2.01 rows=1 width=4)

> explain select * from t where f = func();

> Seq Scan on t (cost=100000000.00..100000001.34 rows=1 width=4)

Not a bug, because you didn't declare the function 'iscachable'.
For all the system knows, func() is like random() and will return a
different result at every row. An indexscan can't be used unless it's
safe to fold the function call down to a constant. See
http://www.postgresql.org/users-lounge/docs/7.0/postgres/sql-createfunction.htm

regards, tom lane

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Michael Richards 2000-07-26 23:42:43 Libpq++ memory leak
Previous Message Andriy I Pilipenko 2000-07-26 06:24:49 Index selection bug