合 PG中的生成列(Generated Columns)
简介
在pg12中create table语句支持GENERATED column(生成列)。
生成列是一个特殊的列,它总是从其他列计算而来。因此说,它对于列就像视图对于表一样。生成列有两种:存储列和虚拟列。 存储生成列在写入(插入或更新)时计算,并且像普通列一样占用存储空间。虚拟生成列不占用存储空间并且在读取时进行计算。 如此看来,虚拟生成列类似于视图,存储生成列类似于物化视图(除了它总是自动更新之外)。 PostgreSQL目前只实现了存储生成列。
建立一个生成列,在 CREATE TABLE
中使用 GENERATED ALWAYS AS
子句, 例如:
1 2 3 4 5 | CREATE TABLE people ( ..., height_cm numeric, height_in numeric GENERATED ALWAYS AS (height_cm / 2.54) STORED ); |
必须指定关键字 STORED
以选择存储类型的生成列。更多细节请参见 CREATE TABLE 。
生成列不能被直接写入. 在INSERT
或 UPDATE
命令中, 不能为生成列指定值, 但是可以指定关键字DEFAULT
。