postgres: проверка ограничений и значения null

пожалуйста, посмотрите на следующую таблицу:

   name  |  x  |  y
---------+-----+------
   foo   |  3  |  5
   bar   | 45  | 99 
  foobar | 88  | 
  barfoo |  0  | 45

Я хочу добавить проверку ограничений (y > x ), но это, очевидно, не удастся из-за нарушения строки "foobar".

Как создать ограничение, которое говорит: check (y > x), но только если y не null?

2 ответов


на самом деле, вам действительно не нужно ничего делать. Ограничение проверки выполняется, если выражение проверки имеет значение true или null.

ваша проверка ограничений (y > x ) будет работать так же, как в вашем сценарии, потому что строка foobar не будет нарушать ограничение, поскольку она оценивается как null


вы можете поместить тест IS NULL в выражение проверки, например:

CREATE TABLE mytable (
    name TEXT,
    x INTEGER,
    y INTEGER CHECK (y IS NULL OR y > x)
);

(протестировано на PostgreSQL 8.4)