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]

Reply via email to