PostgreSQL 8.3 の date_trunc を含む CREATE INDEX
今まで(<=7.4)大丈夫だったのに、8.3 になったら CREATE INDEX 時に "timestamp with time zone" なフィールドに対して、date_trunc 関数などを使うと、以下のエラーが発生してしまう。
ERROR: functions in index expression must be marked IMMUTABLE
http://archives.postgresql.org/pgsql-general/2008-01/msg01509.php
より、
CREATE INDEX request_day_idx ON example (date_trunc('day', request_received AT TIME ZONE 'JST'));
などと、 time zone を指定してやると、"timestamp without time zone" 型になり良いらしい。
また、インデックスを有効にするためには SELECT 文にも"at time zone"をつけてあげないといけない。