BUG #5852: Function date_trunc is not IMMUTABLE

Started by Oleg Serovabout 15 years ago3 messagesbugs
Jump to latest
#1Oleg Serov
serovov@gmail.com

The following bug has been logged online:

Bug reference: 5852
Logged by: Oleg
Email address: serovov@gmail.com
PostgreSQL version: 8.3
Operating system: CentOS
Description: Function date_trunc is not IMMUTABLE
Details:

Please mark function date_trunc as IMMUTABLE for using in index.

Thanks!

In reply to: Oleg Serov (#1)
Re: BUG #5852: Function date_trunc is not IMMUTABLE

On Thu, Jan 27, 2011 at 11:02:46AM +0000, Oleg wrote:

The following bug has been logged online:

Bug reference: 5852
Logged by: Oleg
Email address: serovov@gmail.com
PostgreSQL version: 8.3
Operating system: CentOS
Description: Function date_trunc is not IMMUTABLE
Details:

Please mark function date_trunc as IMMUTABLE for using in index.

it cannot be immutable. please check explanation in here:
http://www.depesz.com/index.php/2010/09/09/why-is-my-index-not-being-used/
search for "immutable".

Best regards,

depesz

--
Linkedin: http://www.linkedin.com/in/depesz / blog: http://www.depesz.com/
jid/gtalk: depesz@depesz.com / aim:depeszhdl / skype:depesz_hdl / gg:6749007

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Oleg Serov (#1)
Re: BUG #5852: Function date_trunc is not IMMUTABLE

"Oleg" <serovov@gmail.com> writes:

Please mark function date_trunc as IMMUTABLE for using in index.

The version for timestamp without time zone already is marked immutable.
The version for timestamp with time zone can't be marked immutable,
because it isn't: its behavior depends on the timezone setting.

Depending on what it is you hope to accomplish, you might be able to do
something like this:

regression=# create table t1 (f1 timestamptz);
CREATE TABLE
regression=# create index ii on t1 (date_trunc('day', f1 AT TIME ZONE 'UTC'));
CREATE INDEX

This is immutable because the truncation happens with respect to a fixed
timezone. (Doesn't have to be UTC, any constant timezone name will do.)

regards, tom lane