可以使用(聚合)函数来定义列吗?

Can (aggregate) functions be used to define a column?

假设 table 像这样:

a | b | total
--|---|------
1 | 2 |  3
4 | 7 | 11
…

CREATE TEMPORARY TABLE summedup (
    a double precision DEFAULT 0
  , b double precision DEFAULT 0
  --, total double precision
);
INSERT INTO summedup (a, b) VALUES (1, 2);
INSERT INTO summedup (a, b) VALUES (4, 7);

SELECT a, b, a + b as total FROM summedup;

总结 SELECT 的前两列很容易。

但是 Postgres (9.6) 是否也支持将 total 定义为其他两列之和的功能?如果是:

您要查找的内容通常称为 "computed column"。

Postgres 9.6 不支持(Postgres 12 - 将于 2019 年第四季度发布 - will)。

但对于这么简单的求和,我不会费心存储冗余信息。

如果不想重复表达式,请创建视图。

我想你想要的是一个视图。

CREATE VIEW table_with_sum AS 
 SELECT id, a, b, a + b as total FROM summedup;

然后您可以在视图中查询总和。

SELECT total FROM table_with_sum where id=5;

View 不会存储每行的总和,每次查询 View 时都会计算 total 列。如果您的目标是提高查询效率,这将无济于事。

还有另一种方法:将列添加到 table 并创建更新触发器,并在每次修改行时插入更新 total 列。