Обучение Postgres, как обрабатывать обновление столбца представления, которое является результатом операции `case` - PullRequest
0 голосов
/ 04 марта 2019

У меня есть ситуация, когда я создаю 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 и многие гуглил ответы на вопросы, я мог бы просто написать триггер, чтобы «перехватить» операцию обновления и обработать обновление / вставку самостоятельно.хотя это возможно, я бы хотел избежать этого решения, поскольку в моем случае речь идет о потенциально десятках или сотнях столбцов, большинство из которых могут быть обновлены по умолчанию, причем некоторые из них отформатированы с использованием операций с кейсами.При таком решении мне потребуется переопределить поведение по умолчанию для каждого столбца.Кроме того, каждый раз, когда я добавляю новый столбец, мне нужно помнить об обновлении триггера, иначе некоторые из моих приложений просто перестанут работать.

Мне было интересно, есть ли какое-либо другое решение для этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...