PostgreSQL中如何在CREATE TABLE时创建自动计算列?
问题解答
在PostgreSQL中,你需要使用**生成列(Generated Column)**实现自动计算两列差值的需求,原代码的问题在于误用了PostgreSQL不存在的DIFFERENCE()函数,直接用算术减法即可完成差值计算。
正确的DDL语句
CREATE TABLE my_table_example ( start_time BIGINT, end_time BIGINT, duration BIGINT GENERATED ALWAYS AS (end_time - start_time) STORED );
关键说明
GENERATED ALWAYS AS (表达式):声明该列为自动计算的生成列,通过end_time - start_time直接得到两列差值。STORED:表示该列值会被物理存储在表中,当start_time或end_time更新时,duration会自动同步更新。PostgreSQL 12+也支持VIRTUAL(仅查询时计算,不存储),根据业务场景选择即可。
修正后的插入语句
原插入语句语法不规范,补充VALUES子句后的正确写法:
INSERT INTO my_table_example (start_time, end_time) VALUES (1, 2); INSERT INTO my_table_example (start_time, end_time) VALUES (2, 5); INSERT INTO my_table_example (start_time, end_time) VALUES (1, 7);
执行后查询表数据,将得到你期望的结果:
start_time | end_time | duration ------------+----------+---------- 1 | 2 | 1 2 | 5 | 3 1 | 7 | 6
内容的提问来源于stack exchange,提问作者stackoverflow
相关产品推荐
相关产品推荐

