Re: [pgsql-ru-general] индекс по полю JSON без функции

From: Sergey Konoplev <gray(dot)ru(at)gmail(dot)com>
To: "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org>
Cc: pgsql-ru-general <pgsql-ru-general(at)postgresql(dot)org>
Subject: Re: [pgsql-ru-general] индекс по полю JSON без функции
Date: 2013-09-25 20:36:51
Message-ID: CAL_0b1vtHJ74DbxULcENYy-vov8PFAus85u1J+htydv3HeRvmQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-ru-general

2013/9/24 Dmitry E. Oboukhov <unera(at)debian(dot)org>:
> хочу построить по нему индекс
>
> CREATE INDEX ON "table" (("field"->>'time'))
> WHERE ("field"->>'time') IS NOT NULL;
>
> но поскольку в SQL запросах хочется оперировать полем time именно как
> TIMESTAMP (а там CHECKER еще накинут на то что проверяет что time
> это либо null либо timestamp).
> то соответственно хочется индекс строить по типу timestamp (иначе
> после приведения этот индекс не используется)
>
> CREATE INDEX ON "table" ((("field"->>'time')::timestamp(0)))
> WHERE ("field"->>'time') IS NOT NULL;
>
> ругается что должно быть immutable.

immutable cast из text в timestamp(tz) в postgres нет, т.к. результат
зависит от внешних факторов, таких как time zone сервера (если без tz)
и DateStyle. Можно написать функцию, например,
full_iso8601_to_timestamp(text), где будет проверка на то что текст в
полном ISO 8601 формате (со всем чем можно и таймзоной), тогда это
будет действительно immutable, и это смело можно будет применять в
индексах. Либо в соответствии с какой-то другой договорённостью,
главное чтобы небыло неоднозначностей.

--
Kind regards,
Sergey Konoplev
PostgreSQL Consultant and DBA

http://www.linkedin.com/in/grayhemp
+1 (415) 867-9984, +7 (901) 903-0499, +7 (988) 888-1979
gray(dot)ru(at)gmail(dot)com

In response to

Responses

Browse pgsql-ru-general by date

  From Date Subject
Next Message Dmitry E. Oboukhov 2013-09-25 22:20:06 Re: Re: [pgsql-ru-general] индекс по полю JSON без функции
Previous Message Nikolay Samokhvalov 2013-09-25 16:06:01 Re: [pgsql-ru-general] индекс по полю JSON без функции