5.2. 默认值
在一个表定义中,默认值被列在列的数据类型之后。如果没有显式指定默认值,则默认值是空值。这是合理的,因为空值表示未知数据。
默认值可以是一个表达式,它将在任何需要插入默认值的时候被实时计算(不是表创建时)。一个常见的例子是为一个timestamp列指定默认值为CURRENT_TIMESTAMP,这样它将得到行被插入时的时间。另一个常见的例子是为每一行生成一个“序列号” 。这在PostgreSQL可以按照如下方式实现:
CREATE TABLE products (
product_no integer DEFAULT nextval('products_product_no_seq'),
...
);
//特别的速写
CREATE TABLE products (
product_no SERIAL,
...
);
5.3. 生成列
生成的列是一个特殊的列,它总是从其他列计算而来。因此说,它对于列就像视图对于表一样。生成列有两种:存储列和虚拟列。 存储生成列在写入(插入或更新)时计算,并且像普通列一样占用存储空间。虚拟生成列不占用存储空间并且在读取时进行计算。如此看来,虚拟生成列类似于视图,存储生成列类似于物化视图(除了它总是自动更新之外)。 PostgreSQL目前只实现了存储生成列。
建立一个生成列,在 CREATE TABLE中使用 GENERATED ALWAYS AS 子句, 例如:
CREATE TABLE people