如何将连锁列添加到现有表?

时间:2016-08-03 00:10:08

标签: sql postgresql pgadmin

我正在尝试这个表达式,但我找不到我的语法错误:

alter table "TableName"
add column "NameColumn" as concat(ColumnA,ColumnB,ColumnC)

所有三个字段都有不同的字符。

2 个答案:

答案 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,但是为了说明这个概念,这可能是一个名义上的例子,所以把它当作它的价值。