CREATE TABLE example_table (
id SERIAL PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
full_name VARCHAR(100) GENERATED ALWAYS AS (first_name || ' ' || last_name) STORED,
age INT,
birth_year INT GENERATED ALWAYS AS (extract(YEAR FROM CURRENT_DATE) - age) STORED
);
在上述示例中:
- full_name 是一个生成列,它的值是 first_name 和 last_name 列的组合。
- birth_year 是另一个生成列,它的值是通过当前年份减去 age 列的值得到的。
在生成列定义中,GENERATED ALWAYS AS 表示生成列的值将总是通过指定的表达式计算,而 STORED 表示生成列的值将存储在表中,而不是在查询时计算。
如果要确保生成列的值在任何时候都是最新的,可以使用 GENERATED ALWAYS AS (...) STORED。如果你不需要物理存储生成列的值,而是希望在每次查询时计算它,可以使用 GENERATED ALWAYS AS (...) VIRTUAL。
示例中的 SERIAL 类型是一种自增序列,用于创建自动递增的唯一标识符列。
生成列为你提供了在数据库层面上动态计算和衍生数据的能力,而不必在应用层面上手动计算或存储这些值。
请注意,生成列在 PostgreSQL 9.6 版本之后才被引入,因此确保你的 PostgreSQL 版本支持生成列功能。
转载请注明出处:http://www.zyzy.cn/article/detail/8123/PostgreSQL