RE: [SQL] indexing a datetime by date

From: "Jackson, DeJuan" <djackson(at)cpsgroup(dot)com>
To: Andrew Merrill <andrew(at)compclass(dot)com>, pgsql-sql(at)hub(dot)org
Cc: "Thomas G(dot) Lockhart" <lockhart(at)alumni(dot)caltech(dot)edu>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, PGSQL Hackers <pgsql-hackers(at)hub(dot)org>
Subject: RE: [SQL] indexing a datetime by date
Date: 1999-03-30 04:07:20
Message-ID: D05EF808F2DFD211AE4A00105AA1B5D20378CC@cpsmail
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers 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(at)compclass(dot)com]
> Sent: Monday, March 29, 1999 9:28 PM
> To: pgsql-sql(at)hub(dot)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
>
>

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Michael Davis 1999-03-30 04:50:50 Some 6.5 regression tests are failing
Previous Message The Hermit Hacker 1999-03-30 04:07:12 Re: [HACKERS] vacuum updated...

Browse pgsql-sql by date

  From Date Subject
Next Message Thomas Lockhart 1999-03-30 06:14:13 Re: [SQL] indexing a datetime by date
Previous Message Andrew Merrill 1999-03-30 03:27:33 indexing a datetime by date