Re: Error: timestamp with timezone + interval is not immutable while creating index

From: Steve Crawford <scrawford(at)pinpointresearch(dot)com>
To: Phil Couling <couling(at)gmail(dot)com>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, pgsql-general(at)postgresql(dot)org
Subject: Re: Error: timestamp with timezone + interval is not immutable while creating index
Date: 2011-10-13 23:49:26
Message-ID: 4E977906.1020208@pinpointresearch.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 10/13/2011 04:32 PM, Tom Lane wrote:
> Phil Couling<couling(at)gmail(dot)com> writes:
>> main=> create index foo_next_update on foo( (last_updated + update_cycle) ) ;
>> ERROR: functions in index expression must be marked IMMUTABLE...
>
> timestamptz + interval is not immutable because the results can vary
> depending on timezone. For instance, in my zone (America/New_York):
>
So it seems like a potential workaround, depending on the nature of your
data and applications, would be to convert the timestamptz into a
timestamp at a reference TZ:

steve=# create table testfoo (a_timestamptz timestamptz, an_interval
interval);
CREATE TABLE
steve=# create index testfoo_index on testfoo ((a_timestamptz at time
zone 'UTC' + an_interval));
CREATE INDEX

You will have to be sure you are getting the results you want in the
vicinity of DST changes and if you are handling multiple timezones.

Cheers,
Steve

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2011-10-13 23:49:59 Re: exclusive OR possible within a where clause?
Previous Message David Salisbury 2011-10-13 23:44:50 exclusive OR possible within a where clause?