You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 23:06:00