概述生成列在写入时自动派生值,CHECK约束确保数据符合规则。结合表达式索引可加速派生字段的查询与过滤,实现一致且高效的数据模型。关键实践与参数生成列: 使用 `GENERATED ALWAYS AS` 定义派生字段校验规则: 使用 `CHECK` 保证数据范围与格式索引: 对派生表达式建立索引事务一致: 在同一事务内写入与校验原子化示例/配置/实现CREATE TABLE orders ( id BIGSERIAL PRIMARY KEY, amount NUMERIC(12,2) NOT NULL, currency TEXT NOT NULL, amount_cents BIGINT GENERATED ALWAYS AS ((amount * 100)::BIGINT) STORED, created_at TIMESTAMPTZ NOT NULL DEFAULT now(), CHECK (amount >= 0), CHECK (currency IN ('CNY','USD','EUR')) ); CREATE INDEX idx_orders_amount_cents ON orders (amount_cents); INSERT INTO orders(amount, currency) VALUES (12.34, 'CNY'); SELECT id, amount_cents FROM orders WHERE amount_cents >= 1000; 验证写时校验: 插入非法金额或不支持币种被拒绝派生正确: `amount_cents` 与 `amount` 一致索引命中: 过滤派生字段时命中表达式索引事务一致: 写入失败不产生部分数据注意事项生成列为存储派生, 修改表达式需谨慎约束错误需清晰可见以便客户端处理数值与精度需根据业务场景选择与分区与统计协同优化

发表评论 取消回复