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)