Предположим, у меня есть такая таблица SQL:
+----+------+-------+
| id | ColA | ColB |
+----+------+-------+
| 1 | red | false |
+----+------+-------+
Я бы хотел, чтобы значение colA изменилось на 'blue', когда я установил значение colB на 'true', чтобы я получил:
+----+------+------+
| id | ColA | ColB |
+----+------+------+
| 1 | blue | true |
+----+------+------+
Я понимаю, что могу просто обновить оба столбца, но мне было интересно, можно ли добавить в БД правило, которое делает это автоматически.
Я использую psql 10.4.
Используйте Курок
В моей БД есть три возможности для (colA, colB): (красный, ложный), (синий, истинный), (синий, ложный). Триггер специально предназначен для случаев, когда colB in (красный, ложь) принимает значение true.


просто используйте случай, когда, поскольку вы не упомянули никакой логики, предположите, что хотите, когда красный, затем синий и истинный
select id, case when ColA='red' then 'blue' end as ColA,
case when ColA='red' then true end as ColB from t
Поскольку Postgresql 10 не поддерживает вычисляемые столбцы, я думаю, у вас есть три варианта:
Определите триггер, который обновляет ColA при обновлении ColB.
Определите представление поверх исходной таблицы, которое вычисляет ColA.
Забудьте о ColA в базе данных и вычислите значение в SELECT.
Оказалось, что структура таблицы основана на недоразумении. Его изменили, и вопрос уже не актуален. Спасибо за ответ :)
Если кола всегда - это
blue, когдаcolb- этоtrue, и всегдаred, когдаcolb- этоfalse, тогда зачем вообще хранитьcola?