时间扩展

来自 PostgreSQL Wiki
跳转到导航跳转到搜索

PostgreSQL 可以扩展成为一个时间数据库。这种数据库会跟踪数据库内容随时间的变化历史,自动保留该历史记录,并允许对其进行修改和查询。当询问数据库内容在任何时间点是什么样子、数据库内容应该是什么样子才能反映实际情况、或者即使数据库更新尚未完成,正式认可的事实是什么时,这种功能非常有用。前两个单独被称为单一时间,分别是事务时间和有效时间,前两个合在一起被称为双一时间,同时支持所有三个被称为三一时间。

扩展和时间增强列表

时间扩展和其他增强功能
名称 描述 实现 单一时间 双一时间 三一时间 备注
周期 周期和 PostgreSQL 的系统版本控制 扩展 Y Y Y 此扩展重新创建了 SQL:2023(最初在 SQL:2011 中)中定义的围绕周期和具有系统版本控制的表的行为。它具有 SQL 标准查询语法,尽可能地符合标准。
时间表扩展 支持时间表。 扩展 事务时间 N N 当您从系统周期时间表中更新或删除一行时,旧行将存档到另一个表中,该表称为历史表。
时间表 时间表扩展重写为触发器 触发器之前 事务时间 N N 此重写旨在在 PL/pgSQL 中提供时间表解决方案,目标是 AWS RDS、Google Cloud SQL 和 Azure Database for PostgreSQL,这些数据库不允许使用自定义 C 扩展。
pg_bitemporal 双一时间扩展 扩展 ? Y ? 功能强大,但文档包括芝加哥 PUG 2020 和芝加哥 2QPG(2017?)的演示视频和相关的幻灯片。

支持时间性的 PostgreSQL 特性

类型

  • TIMESTAMP - 已经在 PostgreSQL 中
  • INTERVAL - 已经在 PostgreSQL 中
  • PERIOD
    • PERIOD(DATE)
    • PERIOD(TIME) 和 PERIOD(TIME WITH TIMEZONE)
    • PERIOD(TIMESTAMP) 和 PERIOD(TIMESTAMP WITH TIMEZONE)
    • PERIOD(INT) 和 PERIOD(INTEGER)
    • PERIOD(SMALLINT)
    • PERIOD(NUMERIC) - 仅限于小数位数为 0
    • PERIOD(DECIMAL) - 仅限于小数位数为 0

由于 TIMESTAMP 和 INTERVAL 类型已经在 PostgreSQL 中,因此此信息将重点介绍 PERIOD 类型。

构造函数

...

运算符

在以下运算符中,pq 是 PERIOD,i 是 INTERVAL。

  • p = q
  • p PRECEDES q
  • p SUCCEEDS q
  • ...

资源

* initial RFC - contains a lot of details and further references