Подтвердить что ты не робот

SQL-запросы в контрольном ограничении

Могу ли я сделать SQL-запросы SQL в контрольном ограничении?

У меня есть таблица post с столбцами id, owner
У меня есть другая таблица action с столбцами user_id, post_id
Таблица user со столбцами id

post_id -> post.id и user_id -> user.id также post.owner -> user.id

Теперь я хочу ограничить post(post_id).id != user_id на таблице action

Как это возможно?

4b9b3361

Ответ 1

Не поддерживается просмотр за пределами текущей строки в ограничении CHECK.

http://www.postgresql.org/docs/9.1/interactive/sql-createtable.html говорит:

Ограничение проверки, указанное как ограничение столбца, должно ссылаться это значение столбца, а выражение, отображаемое в таблице Ограничение может ссылаться на несколько столбцов.

В настоящее время выражения CHECK не могут содержать подзапросы и не ссылаются на переменные, отличные от столбцов текущей строки.

Есть веские причины для этого ограничения, но если вам нравится жонглировать пылающими факелами во время езды на велосипеде по интенсивному трафику, вы можете подорвать ограничение с помощью функций. Ситуации, в которых это не вернется, чтобы укусить вас, редки; вам было бы гораздо безопаснее применять инвариант в коде триггера.

http://www.postgresql.org/docs/9.1/interactive/triggers.html