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

关于YugabyteDB支持Generated Columns及替代方案的问询

YugabyteDB对PostgreSQL 12 Generated Columns的支持情况及替代方案

目前YugabyteDB暂不支持PostgreSQL 12引入的STORED类型生成列(即GENERATED ALWAYS AS (...) STORED语法),不过该特性已被纳入官方开发路线图,后续版本会逐步实现支持。

针对你的需求,可以采用以下两种替代方案:

1. 触发器(Trigger)

通过创建BEFORE INSERT/UPDATE触发器,在数据插入或更新时自动计算并填充目标列,实现与生成列一致的自动计算效果。示例代码如下:

-- 定义计算函数
CREATE OR REPLACE FUNCTION normalize_animal_name()
RETURNS TRIGGER AS $$
BEGIN
  NEW.normalized_name := upper(NEW.name::text);
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- 创建基础表
CREATE TABLE animal (
  id int NOT NULL GENERATED ALWAYS AS IDENTITY,
  name text,
  normalized_name text
);

-- 绑定触发器到表
CREATE TRIGGER trigger_normalize_animal_name
BEFORE INSERT OR UPDATE ON animal
FOR EACH ROW EXECUTE FUNCTION normalize_animal_name();

注意:触发器会带来一定的性能开销,批量操作时需要评估影响。

2. 视图(View)

如果不需要持久化存储计算结果,可以创建视图动态计算目标列。这种方式无需额外存储资源,但无法对计算列创建索引,适合仅需查询场景:

-- 创建基础表
CREATE TABLE animal (
  id int NOT NULL GENERATED ALWAYS AS IDENTITY,
  name text
);

-- 创建包含计算列的视图
CREATE VIEW animal_with_normalized AS
SELECT id, name, upper(name::text) AS normalized_name
FROM animal;

内容的提问来源于stack exchange,提问作者dh YB

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:55:35