• 1011.表-生成列


    生成列的值是其他列的值计算出来的(视图于表);

    生成列是存储列(物化视图,写时算)或虚拟列(普通视图,查时算),PostgreSQL目前只实现了存储生成列;

    生成的列是一个特殊的列,它总是从其他列计算而来。它对于列就像视图对于表一样。

    生成列有两种:存储列和虚拟列。 存储生成列在写入(插入或更新)时计算,并且像普通列一样占用存储空间。虚拟生成列不占用存储空间并且在读取时进行计算。

    虚拟生成列类似于视图,存储生成列类似于物化视图(除了它总是自动更新之外)。PostgreSQL目前只实现了存储生成列。

    建立一个生成列,在 CREATE TABLE中使用 GENERATED ALWAYS AS 子句, 例如:

    CREATE TABLE people (

        ...,

        height_cm numeric,

        height_in numeric GENERATED ALWAYS AS (height_cm / 2.54) STORED

    );

    必须指定关键字 STORED 以选择存储类型的生成列。

    生成列不能被直接写入. 在INSERT 或 UPDATE 命令中, 不能为生成列指定值, 但是可以指定关键字DEFAULT。

    考虑列缺省(设置默认值的列)情况和生成列之间的差异。

    如果没有提供其他值,列缺省情况下在行被首次插入时计算一次;生成列则在行每次改变时进行更新,并且不能被取代。

    列缺省情况下不能引用表的其他列;生成表达式通常会这样做。

    列缺省情况下可以使用易失性函数,例如random()或引用当前时间函数; 而对于生成列这是不允许的。

    生成列和涉及生成列的表的定义有几个限制:

    生成表达式只能使用不可变函数,并且不能使用子查询或以任何方式引用当前行以外的任何内容。

    生成表达式不能引用另一个生成列。

    生成表达式不能引用系统表,除了 tableoid。

    生成列不能具有列默认或标识定义。

    生成列不能是分区键的一部分。

    外部表可以有生成列. 更多细节请参见 CREATE FOREIGN TABLE .

  • 相关阅读:
    Plug It In
    The King's Walk
    Water Testing 匹克定理
    基尔霍夫矩阵
    nginx 常用的命令
    Nginx window安装
    使用nrm管理 npm 镜像仓库
    window 安装node.js
    变量和数据类型
    同步,异步,阻塞,非阻塞
  • 原文地址:https://www.cnblogs.com/bufuzhou/p/14191271.html
Copyright © 2020-2023  润新知