Re: can't create index with 'dowcast' row

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: can't create index with 'dowcast' row
Дата
Msg-id 23262.1201238236@sss.pgh.pa.us
обсуждение исходный текст
Ответ на can't create index with 'dowcast' row  (Louis-David Mitterrand <vindex+lists-pgsql-general@apartia.org>)
Ответы Re: can't create index with 'dowcast' row  (Louis-David Mitterrand <vindex+lists-pgsql-general@apartia.org>)
Список pgsql-general
Louis-David Mitterrand <vindex+lists-pgsql-general@apartia.org> writes:
>     CREATE UNIQUE INDEX visit_idx ON visit_buffer USING btree (id_session,
>     id_story, created_on::date);

>     psql:visit_pkey.sql:5: ERROR:  syntax error at or near "::"

The reason that didn't work is that you need parentheses around an index
expression (otherwise the CREATE INDEX syntax would be ambiguous).

>     CREATE UNIQUE INDEX visit_idx ON visit_buffer USING btree (id_session, id_story, extract(date from created_on));
>     psql:visit_pkey.sql:4: ERROR:  functions in index expression must be marked IMMUTABLE

I take it created_on is timestamp with time zone, not plain timestamp?
The problem here is that the coercion to date is not immutable because
it depends on the timezone setting.  (The other way would have failed
too, once you got past the syntax detail.)  You need to figure out
what your intended semantics are --- in particular, whose idea of
midnight should divide one day from the next --- and then use a
unique index on something like

    ((created_on AT TIME ZONE 'Europe/Paris')::date)

Note that the nearby recommendation to override the immutability
test with a phonily-immutable wrapper function would be a real bad
idea, because such an index would misbehave anytime someone changed
their timezone setting.

            regards, tom lane

В списке pgsql-general по дате отправления:

Предыдущее
От: brian
Дата:
Сообщение: match accented chars with ASCII-normalised version
Следующее
От: Enrico Sirola
Дата:
Сообщение: on delete rules returned rowcount