首页 > 数据库 > mysql教程 > 如何在 PostgreSQL 中模拟计算列?

如何在 PostgreSQL 中模拟计算列?

Linda Hamilton
发布: 2025-01-21 17:12:17
原创
522 人浏览过

How Can I Emulate Computed Columns in PostgreSQL?

在 PostgreSQL 中模拟计算列

与 MS SQL Server 不同,PostgreSQL 本身不支持计算列。 然而,有几种方法可以有效地复制此功能。

PostgreSQL 12 及更高版本

PostgreSQL 12 引入了 STORED 生成列,反映了 SQL Server 计算列的行为。 这些列物理存储在表中,可以在查询期间轻松访问。

<code class="language-sql">CREATE TABLE tbl (
  int1    int,
  int2    int,
  product bigint GENERATED ALWAYS AS (int1 * int2) STORED
);</code>
登录后复制

PostgreSQL 11 及更早版本

对于较旧的 PostgreSQL 版本,模拟虚拟生成列需要函数和属性表示法。

函数语法:

<code class="language-sql">CREATE FUNCTION col(tbl) RETURNS type AS 'expression';</code>
登录后复制

用法:

<code class="language-sql">SELECT tbl.col, ... FROM tbl;</code>
登录后复制

这种方法模仿虚拟生成的列;但是,它不包含在 SELECT * 中。

替代方法

  • 视图: 构造一个包含计算列的视图。 使用 SELECT * 检索原始列和计算列。
  • 触发器:通过创建触发器来实现持久计算列,以便在源列发生更改时自动更新计算列。
  • 物化视图:对于频繁查询的计算列,物化视图预先计算并存储结果,优化性能。

重要注意事项:

  • 存储的生成列(PostgreSQL 12)包含在SELECT *中。
  • 模拟虚拟生成列的函数必须定义为 IMMUTABLE 才能启用表达式索引。
  • 物化视图非常适合需要频繁访问的持久计算列。

以上是如何在 PostgreSQL 中模拟计算列?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板