Мы переходим с Oracle на Postgresql. В Oracle у нас есть следующий уникальный индекс:
CREATE UNIQUE INDEX USER_UI1 ON USER (LOGINID, COALESCE(DATEDELETED,TO_DATE(' 1900-01-01 00:00:00', ' YYYY-MM-DD HH24:MI:SS')));
Когда я пытаюсь создать аналогичный уникальный индекс в Postgresql, я получаю ОШИБКУ: функции в выражении индекса должны быть помечены как IMMUTABLE.
Как мне создать аналогичный уникальный индекс в Postgresql?
Изменить. Это утверждение, которое я пытаюсь использовать в Postgresql.
CREATE UNIQUE INDEX USER_UI1 ON USER (LOGINID, COALESCE(DATEDELETED,TO_DATE(' 1900-01-01 00:00:00', ' YYYY-MM-DD HH24:MI:SS')));
Edit2 - на основе комментария klin работает следующее утверждение:
CREATE UNIQUE INDEX USER_UI1 ON USER (LOGINID, COALESCE(DATEDELETED, ' 1900-01-01 00:00:00'::DATE));
'1900-01-01 00:00:00'::date
вместоto_date()
. Кстати, на самом деле в Postgres вы не можете создать таблицуUSER
. - person klin   schedule 19.05.2016'-infinity'::date
— отличный столб для забора. - person wildplasser   schedule 19.05.2016