Запрет вставки строк в таблицу по значениям из другой таблицы

Есть две таблицы - заказы и перечень услуг. В первой есть поле 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

→ Ссылка