У меня есть ситуация, когда я создаю view
на основе таблицы single из другой схемы (для краткости я сократил пример):
create view b.users as
select
uid as id
case
when name = '' then null
else name
end as username
from public.users;
Поскольку столбец username
в представлении не является простой картой, я не могу просто обновить столбец:
update b.users set username = 'foo' where id = 1234;
Приведенный выше запрос приводит к ошибке.
IsЕсть ли способ, которым я могу сказать Postgres, как обрабатывать обновление в столбце username
?В идеале, это было бы просто вставить необработанные данные (псевдокод):
create trigger handle_username_update before update
on users for each row
b.users.username = NEW.username where b.users.id = NEW.id
Edit
Я уточню немного подробнее, чтобы быть более конкретным в моем вопросе.
Так же, как a_horse_with_no_name
и многие гуглил ответы на вопросы, я мог бы просто написать триггер, чтобы «перехватить» операцию обновления и обработать обновление / вставку самостоятельно.хотя это возможно, я бы хотел избежать этого решения, поскольку в моем случае речь идет о потенциально десятках или сотнях столбцов, большинство из которых могут быть обновлены по умолчанию, причем некоторые из них отформатированы с использованием операций с кейсами.При таком решении мне потребуется переопределить поведение по умолчанию для каждого столбца.Кроме того, каждый раз, когда я добавляю новый столбец, мне нужно помнить об обновлении триггера, иначе некоторые из моих приложений просто перестанут работать.
Мне было интересно, есть ли какое-либо другое решение для этой проблемы.