On Mon, 8 Nov 2004 07:56 am, "Miquel van Smoorenburg" wrote:
> I have a database with a btree index on the 'removed' field,
> which is of type 'date'. However it isn't being used:
>
> techdb2=> explain select * from lines where removed > CURRENT_DATE;
> QUERY PLAN
> ------------------------------------------------------------
> Seq Scan on lines (cost=0.00..243.47 rows=2189 width=324)
> Filter: (removed > ('now'::text)::date)
> (2 rows)
>
> Now the weird thing is that if I select a range it is being used:
>
> techdb2=> explain select * from lines where removed > CURRENT_DATE and
> removed < '9999-01-01';
> QUERY PLAN
> ------------------------------------------------------------------------------------
> Index Scan using lines_removed_idx on lines (cost=0.00..120.56 rows=33
> width=324)
> Index Cond: ((removed > ('now'::text)::date) AND (removed <
> '9999-01-01'::date))
> (2 rows)
>
> Why is this?
>
> (Tested with both 7.3.2 and 7.4.6)
>
> Mike.
>
now() and CURRENT_DATE, are and cannot be planned as constants.
So the planner cannot use an index for them.
This have been covered on the list a number of times. Until a solution is at
hand,
you can either use constants instead of now, or create a immutable function
that returns now.
However if you PREPARE those queries, you will not get the new time for now()
each time you
run the query.
This function fits in a category between STABLE and IMMUTABLE, of which there
is currently
no type.
Regards
Russell Smith
---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]