RE: [SQL] indexing a datetime by date - Mailing list pgsql-sql

From Jackson, DeJuan
Subject RE: [SQL] indexing a datetime by date
Date
Msg-id D05EF808F2DFD211AE4A00105AA1B5D20378CC@cpsmail
Whole thread Raw
Responses RE: [SQL] indexing a datetime by date  (Herouth Maoz <herouth@oumail.openu.ac.il>)
List pgsql-sql
Part of the problem is that PostgreSQL Assumes that a functions value will
change each time it is required, therefore automatic table scan and the
function is called for each row.
Try using 'now'::date instead of now()::date
You index creation syntax is good but there's a bug in function indexes
which require you to specify the ops. Try:create index when_ndx3 on notes (date(when) date_ops);

Which won't work because the date(datetime) function isn't trusted.
You can change this yourself in the system tables or you can use PL/PGSQL
(the only trustable PL in PostgreSQL that I've found) to create another
conversion function and use it instead.  Or you can as Thomas Lockhart (or
is it Tom Lane) if he'd create a trusted function for the conversions in
6.5.
DISCLAIMER: I haven't tested this on the current CSV(?CVS I just can't think
tonight) so it might already be fixed.-DEJ

> -----Original Message-----
> From: Andrew Merrill [mailto:andrew@compclass.com]
> Sent: Monday, March 29, 1999 9:28 PM
> To: pgsql-sql@hub.org
> Subject: [SQL] indexing a datetime by date
> 
> 
> I have a table with a field, "when", of type "datetime".  I can't use
> "date" because I need the times as well.  I'm using PostgreSQL 6.4.2.
> 
> I'd like to identify all of the records with today's date, as in:
> 
> select when from notes where when::date = now()::date;
> 
> The query works, but is very slow.  Explain confirms that a sequential
> scan is being used.
> 
> I've tried indexing on when:
> 
> create index when_ndx1 on notes (when);
> 
> But that doesn't help, as (I suppose) the optimizer can't match
> when::date with this index.
> 
> Neither of these works:
> 
> db=> create index when_ndx2 on notes (when::date);
> ERROR:  parser: parse error at or near "::"
> 
> db=> create index when_ndx3 on notes (date(when));
> ERROR:  DefineIndex:  class not found
> 
> As a workaround, I've been using this:
> 
> select when from notes where when >= '3/29/1999 0:0:0' and when <=
> '3/29/1999 23:59:59';
> 
> but that's ugly and requires hardcoding today's date each time, rather
> than using now().
> 
> So, the question is, is there a way to index a datetime field by date?
> 
> Andrew Merrill
> 
> 


pgsql-sql by date:

Previous
From: Andrew Merrill
Date:
Subject: indexing a datetime by date
Next
From: Thomas Lockhart
Date:
Subject: Re: [SQL] indexing a datetime by date