Это не точно отвечает на ваш вопрос, но я думаю, что он выполнит то же самое. Конечно, есть накладные расходы с помощью триггеров, но вместо создания представления я не уверен, как это сделать, когда происходит DML.
CREATE OR REPLACE FUNCTION tablename_insert_update_trigger()
RETURNS trigger AS
$BODY$
BEGIN
new."NameColumn" = concat(ColumnA, ColumnB, ColumnC);
return new;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
А затем установить, срабатывающие в любое время ваша таблица модифицируется:
CREATE TRIGGER insert_tablename_trigger
BEFORE INSERT
ON "TableName"
FOR EACH ROW
EXECUTE PROCEDURE tablename_insert_update_trigger();
CREATE TRIGGER update_tablename_trigger
BEFORE UPDATE
ON "TableName"
FOR EACH ROW
EXECUTE PROCEDURE tablename_insert_update_trigger();
Тем не менее, я думаю, что в большинстве случаев @ предложение Nicarus о целях является путь. Единственной альтернативой, где триггер будет предпочтительнее, является то, что функция на самом деле довольно сложна (вычислительно дорого), а DML происходит либо редко, либо в непиковые часы, тогда как чтение происходит часто и/или в часы пик.
Ваш пример был простым concat, но, возможно, это был условный пример с целью иллюстрации концепции, поэтому возьмите это за то, что это стоит.
Почему бы просто не создать представление? – Nicarus
Потому что я присоединяюсь к другим таблицам и добавляю записи потом –