Обычно вам требуется специальная функция, чтобы определить, является ли значение NaN (аналогично требованию is null
и is not null
тестов для SQL null
), но в PostgreSQL NaN = NaN
равно true :
[...] Чтобы разрешить сортировку и использование числовых значений в древовидных индексах, PostgreSQL рассматривает значения NaN
как равные и превышающие все значения, отличные от NaN
.
Итак, достаточно простого ограничения CHECK с прямым сравнением:
check (myvar <> 'NaN')
Вы можете включить приведение, если хотите, но не обязательно:
check (myvar <> 'NaN'::real)
check (myvar <> 'NaN'::numeric)