首页 数据库 mysql教程 PostgreSQL 对计算列的支持是如何演变的?

PostgreSQL 对计算列的支持是如何演变的?

Jan 21, 2025 pm 05:16 PM

How Has PostgreSQL's Support for Computed Columns Evolved?

PostgreSQL 计算列:回顾

PostgreSQL 作为一款强大的关系型数据库管理系统,提供了广泛的数据操作和管理功能。然而,计算列(也称为计算列、虚拟列、派生列或生成列)在其功能中一直缺失。本文深入探讨 PostgreSQL 中对计算列的支持,考察其在不同版本中的演变。

PostgreSQL 11 及更早版本

在 PostgreSQL 11 之前,数据库并不直接支持计算列。但是,用户可以使用带属性表示法 (tbl.col) 的函数来模拟虚拟计算列。此技术提供了一种类似于虚拟生成列的变通方法。然而,它的使用需要在 SELECT 查询中显式列出表达式。

PostgreSQL 12 及更高版本

随着 PostgreSQL 12 的出现,数据库引入了 STORED 生成列,这与 SQL 标准一致,并符合 DB2、MySQL 和 Oracle 等 DBMS 中的实现。这些计算列存储在表的数据中,并根据指定的表达式自动更新。

考虑以下示例:

CREATE TABLE tbl (
  int1    int
, int2    int
, product bigint GENERATED ALWAYS AS (int1 * int2) STORED
);
登录后复制

在此示例中,“product” 列是一个 STORED 生成列,它计算 int1 和 int2 的乘积。

替代方案

在不直接支持生成列的 PostgreSQL 版本中,可以使用其他方法:

  • 视图 (VIEWs): 视图可以通过定义生成所需列值的查询来模拟计算列的行为。
  • 表达式索引 (Expression Indexes): 表达式索引可以通过在计算列的表达式上创建索引来提高涉及计算列的查询的性能。
  • 物化视图 (Materialized Views): 物化视图是查询的预计算版本,可以提高查询性能。在提供预计算值方面,它们的功能类似于计算列。

结论

PostgreSQL 对计算列的支持在其各个版本中都有显着的改进。虽然在 PostgreSQL 11 之前没有明确包含计算列,但数据库提供了使用函数和属性表示法的变通方法。 PostgreSQL 12 引入了 STORED 生成列,从而在数据库本身中支持计算列。这些改进为用户提供了数据操作方面的额外灵活性和性能优化。

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

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

减少在Docker中使用MySQL内存的使用 减少在Docker中使用MySQL内存的使用 Mar 04, 2025 pm 03:52 PM

减少在Docker中使用MySQL内存的使用

如何使用Alter Table语句在MySQL中更改表? 如何使用Alter Table语句在MySQL中更改表? Mar 19, 2025 pm 03:51 PM

如何使用Alter Table语句在MySQL中更改表?

mysql无法打开共享库怎么解决 mysql无法打开共享库怎么解决 Mar 04, 2025 pm 04:01 PM

mysql无法打开共享库怎么解决

什么是 SQLite?全面概述 什么是 SQLite?全面概述 Mar 04, 2025 pm 03:55 PM

什么是 SQLite?全面概述

在 Linux 中运行 MySQl(有/没有带有 phpmyadmin 的 podman 容器) 在 Linux 中运行 MySQl(有/没有带有 phpmyadmin 的 podman 容器) Mar 04, 2025 pm 03:54 PM

在 Linux 中运行 MySQl(有/没有带有 phpmyadmin 的 podman 容器)

在MacOS上运行多个MySQL版本:逐步指南 在MacOS上运行多个MySQL版本:逐步指南 Mar 04, 2025 pm 03:49 PM

在MacOS上运行多个MySQL版本:逐步指南

如何保护MySQL免受常见漏洞(SQL注入,蛮力攻击)? 如何保护MySQL免受常见漏洞(SQL注入,蛮力攻击)? Mar 18, 2025 pm 12:00 PM

如何保护MySQL免受常见漏洞(SQL注入,蛮力攻击)?

如何为MySQL连接配置SSL/TLS加密? 如何为MySQL连接配置SSL/TLS加密? Mar 18, 2025 pm 12:01 PM

如何为MySQL连接配置SSL/TLS加密?

See all articles