Re: ERROR: functions in index expression must be marked IMMUTABLE

From: "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>
To: naveen kumar <mnaveendba2(at)gmail(dot)com>
Cc: "pgsql-admin(at)postgresql(dot)org" <pgsql-admin(at)postgresql(dot)org>
Subject: Re: ERROR: functions in index expression must be marked IMMUTABLE
Date: 2015-03-25 23:09:59
Message-ID: CAKFQuwbcMfesmNkm19mXFLXP14sP5BiPsR1GSkY1suKiM1rukg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-admin

On Wed, Mar 25, 2015 at 3:54 PM, naveen kumar <mnaveendba2(at)gmail(dot)com> wrote:

> Hello Experts..
>
> postgres=# create index idx_calls_call_datetime on calls using btree
> ((call_datetime::date));
> ERROR: functions in index expression must be marked IMMUTABLE
>
> bit confused with above error, can any one please help me on this, and if
> possible let me explain when this error occurs and what it does. Thanks in
> advance.
>

​A function used in creating an index must solely rely upon its parameter
inputs (or internal definition, of course) during evaluation. It cannot
rely upon any external configuration. Casting to date (from unknown or
timestamptz) requires knowledge of timezone, a system-level (i.e. external
to the function) configuration and so cannot be part of an index expression.

​Typically with timestamptz you first need to convert them to timestamp
using a known, usually UTC, timezone. The conversion from timestamp (no
tz) to date is immutable. This can be done with "AT TIME ZONE": SELECT
now() AT TIME ZONE 'UTC';

​David J.

In response to

Responses

Browse pgsql-admin by date

  From Date Subject
Next Message naveen kumar 2015-03-25 23:57:32 Re: ERROR: functions in index expression must be marked IMMUTABLE
Previous Message naveen kumar 2015-03-25 22:54:55 ERROR: functions in index expression must be marked IMMUTABLE