还有另一个选项更接近您的想法:“计算字段”或“生成的列”。实际上是一个以行类型为参数的函数。我在这里引用手册:
函数表示法和属性表示法之间的等价性使得可以在复合类型上使用函数来模拟“计算字段”
您的示例可能如下所示:
CREATE TABLE tbl (a_id int, a int, b int);
INSERT INTO tbl VALUES (1,3,7), (2,4,8), (3,9,2);
模拟计算域的函数calc
:
CREATE OR REPLACE FUNCTION calc(tbl)
RETURNS numeric LANGUAGE sql IMMUTABLE AS
$func$
SELECT round($1.a::numeric/$1.b, 2)
$func$;
称呼:
SELECT *, t.calc FROM tbl t; -- note the table-qualified call!
回报:
a_id | a | b | calc
------+---+---+------
1 | 3 | 7 | 0.43
2 | 4 | 8 | 0.50
3 | 9 | 2 | 4.50
具有更多详细信息和解释的相关答案:
PostgreSQL 中的计算/计算列
如何进行忽略年份的日期数学?
将常见查询存储为列?