PostgreSQL 中的计算/计算/虚拟/派生列

2023-12-02

PostgreSQL 是否像 MS SQL Server 一样支持计算/计算列?我在文档中找不到任何内容,但由于许多其他 DBMS 中都包含此功能,我想我可能会遗漏一些东西。

Eg: http://msdn.microsoft.com/en-us/library/ms191250.aspx


Postgres 12 或更高版本

STORED生成的列随 Postgres 12 引入 - 正如 SQL 标准中所定义,并由一些 RDBMS(包括 DB2、MySQL 和 Oracle)实现。或者类似的“计算列”SQL Server 的。

简单的例子:

CREATE TABLE tbl (
  int1    int
, int2    int
, product bigint GENERATED ALWAYS AS (int1 * int2) STORED
);

fiddle

VIRTUAL生成的列可能会伴随下一次迭代之一。 (Postgres 16 中还没有)。

Related:

  • 函数调用的属性表示法给出错误

Postgres 11 或更早版本

Postgres 11 及以下版本不支持“生成的列”。
你可以效仿VIRTUAL生成的列function using 属性表示法 (tbl.col) that 外观和工作方式与虚拟生成列非常相似。这是由于历史原因而存在于 Postgres 中的一种语法奇怪现象,并且恰好符合这种情况。这个相关答案有代码示例:

  • 将常见查询存储为列?

表达式(看起来像列)不包含在SELECT * FROM tbl, 尽管。您始终必须明确列出它。

也可以通过配套的支持表达指数- 假设函数是IMMUTABLE. Like:

CREATE FUNCTION col(tbl) ... AS ...  -- your computed expression here
CREATE INDEX ON tbl(col(tbl));

备择方案

或者,您可以使用以下方法实现类似的功能VIEW,可选地与表达式索引结合。然后SELECT *可以包括生成的列。

“坚持”(STORED)计算列可以通过以下方式实现triggers以功能等效的方式。

物化视图是一个相关的概念,自 Postgres 9.3 起实施.
在早期版本中,人们可以手动管理 MV。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PostgreSQL 中的计算/计算/虚拟/派生列 的相关文章

  • Postgres 创建一个带有外键数组的表

    我正在制作一个名为 routes 的表 我希望它能够包含航班列表 航班详情请参阅航班表 我希望 航班 是航班表中的外键 ID 数组 所以 我有这个代码 CREATE TABLE routes id SERIAL PRIMARY KEY fl
  • 如何使用带有 where 子句的内连接?

    我在这里发布一些扩展如何连接多个sql查询以获得一张表 https stackoverflow com questions 71098208 how to concatenate more sql queries to get one ta
  • SQL Server 查询从字符串中删除最后一个单词

    SO 中已经有一个带有 MySQL 标签的问题的答案 因此 我决定让您的生活更轻松 并为 SQL Server 用户提供以下答案 总是很高兴看到不同的答案 也许会有更好的表现 快乐编码 SELECT SUBSTRING YourString
  • 在 ASP.NET 中将多个字段绑定到列表框

    我对 ASP NET 尤其是 LINQ 和 SQL 还很陌生 假设我有一个表 员工 其中包含 姓氏 名字 和 ID 字段 我想将其绑定到列表框 我希望列表框显示其内容 例如 LASTNAME FIRSTNAME 并且我希望每个项目的值为 I
  • SQL - 复杂动态行的选择查询

    我需要根据搜索条件从下表中检索ListingId 请帮助检索以下条件的查询的最佳方法 注意 ListingId可以有任意多个ExtrafieldId 所以搜索ListingId是基于动态ExtrafieldId If ExtrafieldI
  • 树形表的sql查询

    我有一个树形结构的表 id parentId name 1 0 Category1 2 0 Category2 3 1 Category3 4 2 Category4 5 1 Category5 6 2 Category6 7 3 Cate
  • SQL Server:使用计算列批量插入表

    我尝试使用 bcp 将文本文件中的数据插入到具有计算列的 SQL Server 2016 表中 我的 bcp 命令 bcp Test dbo myFirstImport IN D myFirstImport txt f D myFirstI
  • 如何在 SQLAlchemy 中连接两个表中的数据?

    我有3张桌子 Account User and Organization Account由组成id name and organization id User由组成email and organization id Organization
  • 将 SQL 保留在存储过程中与代码中的优点和缺点是什么

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动
  • 相当于 pandas 'transform' 的 SQL 是什么?

    假设您有以下 SQL 表 A B C 2 1 4 3 4 5 3 1 1 1 4 0 5 0 1 并且您想要添加 显示一个列 其中包含 A 列对于 B 列的每个不同值的平均值 或任何其他聚合函数 您想要保留所有列 所以结果会是这样的 A B
  • 如何使用SpringBoot + JPA存储PostgreSQL jsonb?

    我正在开发一个迁移软件 该软件将消耗来自 REST 服务的未知数据 我已经考虑过使用 MongoDB 但我决定不使用它而使用 PostgreSQL 读完后this https blog codeship com unleash the po
  • 选择出现多次的行

    TableOne PersonId PersonScore 1 10 1 20 2 99 2 40 3 45 我只需要获取 PersonId 多次出现的那些行 例如以下是我想要实现的结果集 PersonId PersonScore 1 10
  • 如何使用diesel-rs选择色谱柱的子集?

    我现在花了几个小时的时间来查询表的可用列的子集以及在其中包含计算 我知道这不是在选择查询中执行计算的最佳方式 但现在 我只是在开发一个原型 它应该是可行的 我在用diesel rs作为后端实现中所有数据库操作的 ORM 数据将存储在 Pos
  • 检查SQL Server数据库表中是否存在表或列

    在 SQL Server 数据库中创建列或表之前 我想检查所需的表和 或列是否存在 我已经四处搜寻 到目前为止发现了两种方法 我不想使用存储过程 通过使用SqlCommand ExecuteScalar 方法并捕获异常来确定表 列是否存在
  • 在每个条目一分钟内通过联系人查找 20 个或更多条目

    我们正在收集联系人及其访问的每个页面的一些分析数据 许多分析数据来自恶意攻击或机器人 因此它们在一分钟之内就访问了网站的 20 多个页面 我希望能够每天清除一次这些数据 但不知道如何编写一个 SQL 查询来选择该联系人在一分钟内访问超过 2
  • MySQL JOIN 的评估顺序是什么?

    我有以下查询 SELECT c FROM companies AS c JOIN users AS u USING companyid JOIN jobs AS j USING userid JOIN useraccounts AS us
  • Oracle SQL 触发器上的变异表

    我正在尝试执行触发器 但出现变异表错误 SQL 代码是这样的 CREATE OR REPLACE TRIGGER CHK Apartado D BEFORE INSERT OR UPDATE ON CONTRACTS FOR EACH RO
  • WHERE IN 条件不接受字符串值

    我正在动态构造一个带有名称的字符串用户数据在 PL Sql 过程中通过附加用户名 单引号 和逗号 的形式 abc123 xyz456 pqr789 但是当我将此字符串传递给 SELECT 语句的 WHERE IN 条件时 SELECT FR
  • 如何更改 PostgreSQL 表中列的数据类型?

    在 PostgreSQL 交互式终端中输入以下命令会导致错误 ALTER TABLE tbl name ALTER COLUMN col name varchar 11 更改列的数据类型的正确命令是什么 请参阅此处的文档 http www
  • 在实时计算机上更新(或替换)整个数据库表的最佳方法是什么?

    我每周都会收到一个数据源 我将对其进行解析并放入数据库中 数据每周不会有太大变化 但我应该定期更新数据库 除了每周更新外 数据是静态的 目前重建整个数据库不是问题 但最终该数据库将上线 人们可以在我重建数据库时查询该数据库 数据量并不小 几

随机推荐