Возможно ли сделать XOR CHECK CONSTRAINT?Postgres SQL Exclusive OR (XOR) CHECK CONSTRAINT, возможно ли это?
Я делаю это на тестовой таблице, я только что сделал, что называется тест и имеет 3 колонки:
- идентификатор, BigInt
- а, BigInt
- б, BigInt
Я сделал проверочное ограничение для этого:
(a IS NOT NULL AND b = NULL) OR (b IS NOT NULL AND a = NULL)
Which apparently would work in MSSQL
Я проверил это, делая это:
INSERT INTO public.test(
id, a, b)
VALUES (1, 1, 1);
Который должен потерпеть неудачу, видя, как он не принимает значение TRUE, по обе стороны от OR. Тем не менее, вставка очень хорошая.
Когда я смотрю на то, что Postgres на самом деле хранится в виде ограничения я получаю это:
(a IS NOT NULL AND b = NULL::bigint OR b IS NOT NULL AND a = NULL::bigint)
Я слышал, и превалирует над ИЛИ, так что даже это должно работать.
У кого-нибудь есть решение для этого? Предпочтительно тот, который также возможен с тремя или более столбцами? Я понимаю, что это может быть сложнее.
EDIT: Изменение
= NULL
в
IS NULL
дать мне:
ERROR: cannot cast type boolean to bigint
Это 'IS NULL'. – jarlh
@jarlh «ОШИБКА: не могу использовать тип boolean to bigint», если я это сделаю. – Blanen
Кажется, что вы пытаетесь использовать какой-то специальный SQL-адрес Postgresql здесь (я не знаю.) – jarlh