时间扩展
来自 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 类型。
构造函数
...
运算符
在以下运算符中,p 和 q 是 PERIOD,i 是 INTERVAL。
- p = q
- p PRECEDES q
- p SUCCEEDS q
- ...
资源
* initial RFC - contains a lot of details and further references