Запрет вставки строк в таблицу по значениям из другой таблицы
Есть две таблицы - заказы и перечень услуг. В первой есть поле bool, что заказ утверждён, если он true то во вторую таблицу вставлять/далять значения нельзя. С изменением первой таблицы и удалением из второй понятно. В случае INSERT происходит вставка сразу нескольких значений.
INSERT INTO b (a_id, b_value) VALUES (1, 'AA1-BB1'),(1, 'AA1-BB2'),(1, 'AA1-BB3') WHERE (SELECT NOT confirm FROM a WHERE a_id = 1)
даёт ошибку Вот пример
Как запретить вставлять без триггеров и хранимых процедур? Можно ли составить как-то сложный constraint или внешний ключ для проверки условия на уровне СУБД?
Ответы (1 шт):
Автор решения: yrichs
→ Ссылка
Пока делаю так.
INSERT INTO b (a_id, b_value) SELECT * FROM (VALUES (1, 'AA1-BB1'),(1, 'AA1-BB2'),(1, 'AA1-BB3')) val WHERE (SELECT NOT confirm FROM a WHERE a_id = 2);
https://dbfiddle.uk/?rdbms=postgres_12&fiddle=ac6049e1b37ee04346bd9ab058b5e6bf