ограничение базы данных с условием из другой таблицы - PullRequest
1 голос
/ 01 мая 2019

Я хочу создать ограничение базы данных, основанное на другом условии таблицы. Я использую базу данных Postgres.

TableA

id     value    
7890    none
2345    none
1394    change
2412    none
5432    change

TableB

rank    name      table-a-id    category
29      David         7890         A
13      May           2345         A
10      Charles       1394         B  
01      Rose          2412         A
62      Robby         5432         B

Мне нужно сделать ограничение базы данных, когда значение в Таблице A = изменение, тогда в Таблице B должна быть категория = B.

Моя попытка до сих пор:

ALTER TABLE TableB ADD CHECK (SELECT 1 FROM TableA a, TableB b where a.value = "change" and b.category = "B")

Любой совет будет высоко ценится.

1 Ответ

1 голос
/ 01 мая 2019

Невозможно, по крайней мере, в последней версии Postgres, использовать запрос внутри проверочного ограничения.Но мы можем попробовать обработать это через триггер в качестве обходного пути:

CREATE OR REPLACE FUNCTION check_table_a()
RETURNS TRIGGER AS
$$
BEGIN
IF NOT EXISTS (SELECT 1 FROM TableB b
    WHERE b.category = 'B' AND b.table-a-id = NEW.id)
THEN Raise Exception 'TableA id % does not have B category', NEW.id;
END IF;
RETURN NEW;
END;
$$ LANGUAGE PLpgSQL;

CREATE TRIGGER check_me
BEFORE UPDATE ON TableA
FOR EACH ROW EXECUTE PROCEDURE check_table_a();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...