我正在尝试这个表达式,但我找不到我的语法错误:
alter table "TableName"
add column "NameColumn" as concat(ColumnA,ColumnB,ColumnC)
所有三个字段都有不同的字符。
答案 0 :(得分:1)
有什么问题是你想要在添加列之后进行更新:
alter table "TableName" add column "NameColumn" varchar(255); -- or whatever
update "TableName
set "NameColumn" = concat(ColumnA, ColumnB, ColumnC);
Postgres不直接支持计算列。有各种更繁琐的解决方法,其中一些由Erwin Brandstetter提出here。
答案 1 :(得分:0)
这并没有准确回答你的问题,但我认为它会完成同样的事情。当然,有触发器的开销,但是没有创建视图,而是我不确定在发生DML时如何实现这一点。
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();
然后在修改表格时设置该触发器:
stderr
那就是说,我认为在大多数情况下@ Nicarus建议的观点是要走的路。触发器更可取的另一种选择是,如果功能实际上非常复杂(计算成本高)并且DML不经常发生或在非高峰时段发生,而读取经常发生和/或在高峰时段发生。
你的例子是一个简单的concat,但是为了说明这个概念,这可能是一个名义上的例子,所以把它当作它的价值。