pg_when
PostgreSQL 自然语言时间解析扩展
概览
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 1120 | pg_when | 否 | 是 | 否 | 是 | 否 | 否 | - |
| 相关扩展 | pg_cron pgcalendar pg_rrule cron_utils pgagent pg_task pg_dbms_job pg_duration pg_bikram_sambat pg_dispatch |
|---|
Upstream 0.1.10 supports PostgreSQL 13-18 and pins pgrx 0.18.1; PIGSTY packages PostgreSQL 14-18 with a locked pgrx 0.19.1 compatibility update.
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.1.10 | 1817161514 | pg_when | - |
| RPM | PIGSTY | 0.1.10 | 1817161514 | pg_when_$v | - |
| DEB | PIGSTY | 0.1.10 | 1817161514 | postgresql-$v-pg-when | - |
| OS / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
| el8.x86_64 | PIGSTY 0.1.10 el8.x86_64.pg18 : pg_when_18 pg_when_18-0.1.10-1PGSTY.el8.x86_64.rpm
| PIGSTY 0.1.10 el8.x86_64.pg17 : pg_when_17 pg_when_17-0.1.10-1PGSTY.el8.x86_64.rpm
| PIGSTY 0.1.10 el8.x86_64.pg16 : pg_when_16 pg_when_16-0.1.10-1PGSTY.el8.x86_64.rpm
| PIGSTY 0.1.10 el8.x86_64.pg15 : pg_when_15 pg_when_15-0.1.10-1PGSTY.el8.x86_64.rpm
| PIGSTY 0.1.10 el8.x86_64.pg14 : pg_when_14 pg_when_14-0.1.10-1PGSTY.el8.x86_64.rpm
|
| el8.aarch64 | PIGSTY 0.1.10 el8.aarch64.pg18 : pg_when_18 pg_when_18-0.1.10-1PGSTY.el8.aarch64.rpm
| PIGSTY 0.1.10 el8.aarch64.pg17 : pg_when_17 pg_when_17-0.1.10-1PGSTY.el8.aarch64.rpm
| PIGSTY 0.1.10 el8.aarch64.pg16 : pg_when_16 pg_when_16-0.1.10-1PGSTY.el8.aarch64.rpm
| PIGSTY 0.1.10 el8.aarch64.pg15 : pg_when_15 pg_when_15-0.1.10-1PGSTY.el8.aarch64.rpm
| PIGSTY 0.1.10 el8.aarch64.pg14 : pg_when_14 pg_when_14-0.1.10-1PGSTY.el8.aarch64.rpm
|
| el9.x86_64 | PIGSTY 0.1.10 el9.x86_64.pg18 : pg_when_18 pg_when_18-0.1.10-1PGSTY.el9.x86_64.rpm
| PIGSTY 0.1.10 el9.x86_64.pg17 : pg_when_17 pg_when_17-0.1.10-1PGSTY.el9.x86_64.rpm
| PIGSTY 0.1.10 el9.x86_64.pg16 : pg_when_16 pg_when_16-0.1.10-1PGSTY.el9.x86_64.rpm
| PIGSTY 0.1.10 el9.x86_64.pg15 : pg_when_15 pg_when_15-0.1.10-1PGSTY.el9.x86_64.rpm
| PIGSTY 0.1.10 el9.x86_64.pg14 : pg_when_14 pg_when_14-0.1.10-1PGSTY.el9.x86_64.rpm
|
| el9.aarch64 | PIGSTY 0.1.10 el9.aarch64.pg18 : pg_when_18 pg_when_18-0.1.10-1PGSTY.el9.aarch64.rpm
| PIGSTY 0.1.10 el9.aarch64.pg17 : pg_when_17 pg_when_17-0.1.10-1PGSTY.el9.aarch64.rpm
| PIGSTY 0.1.10 el9.aarch64.pg16 : pg_when_16 pg_when_16-0.1.10-1PGSTY.el9.aarch64.rpm
| PIGSTY 0.1.10 el9.aarch64.pg15 : pg_when_15 pg_when_15-0.1.10-1PGSTY.el9.aarch64.rpm
| PIGSTY 0.1.10 el9.aarch64.pg14 : pg_when_14 pg_when_14-0.1.10-1PGSTY.el9.aarch64.rpm
|
| el10.x86_64 | PIGSTY 0.1.10 el10.x86_64.pg18 : pg_when_18 pg_when_18-0.1.10-1PGSTY.el10.x86_64.rpm
| PIGSTY 0.1.10 el10.x86_64.pg17 : pg_when_17 pg_when_17-0.1.10-1PGSTY.el10.x86_64.rpm
| PIGSTY 0.1.10 el10.x86_64.pg16 : pg_when_16 pg_when_16-0.1.10-1PGSTY.el10.x86_64.rpm
| PIGSTY 0.1.10 el10.x86_64.pg15 : pg_when_15 pg_when_15-0.1.10-1PGSTY.el10.x86_64.rpm
| PIGSTY 0.1.10 el10.x86_64.pg14 : pg_when_14 pg_when_14-0.1.10-1PGSTY.el10.x86_64.rpm
|
| el10.aarch64 | PIGSTY 0.1.10 el10.aarch64.pg18 : pg_when_18 pg_when_18-0.1.10-1PGSTY.el10.aarch64.rpm
| PIGSTY 0.1.10 el10.aarch64.pg17 : pg_when_17 pg_when_17-0.1.10-1PGSTY.el10.aarch64.rpm
| PIGSTY 0.1.10 el10.aarch64.pg16 : pg_when_16 pg_when_16-0.1.10-1PGSTY.el10.aarch64.rpm
| PIGSTY 0.1.10 el10.aarch64.pg15 : pg_when_15 pg_when_15-0.1.10-1PGSTY.el10.aarch64.rpm
| PIGSTY 0.1.10 el10.aarch64.pg14 : pg_when_14 pg_when_14-0.1.10-1PGSTY.el10.aarch64.rpm
|
| d12.x86_64 | PIGSTY 0.1.10 d12.x86_64.pg18 : postgresql-18-pg-when postgresql-18-pg-when_0.1.10-1PGSTY~bookworm_amd64.deb
| PIGSTY 0.1.10 d12.x86_64.pg17 : postgresql-17-pg-when postgresql-17-pg-when_0.1.10-1PGSTY~bookworm_amd64.deb
| PIGSTY 0.1.10 d12.x86_64.pg16 : postgresql-16-pg-when postgresql-16-pg-when_0.1.10-1PGSTY~bookworm_amd64.deb
| PIGSTY 0.1.10 d12.x86_64.pg15 : postgresql-15-pg-when postgresql-15-pg-when_0.1.10-1PGSTY~bookworm_amd64.deb
| PIGSTY 0.1.10 d12.x86_64.pg14 : postgresql-14-pg-when postgresql-14-pg-when_0.1.10-1PGSTY~bookworm_amd64.deb
|
| d12.aarch64 | PIGSTY 0.1.10 d12.aarch64.pg18 : postgresql-18-pg-when postgresql-18-pg-when_0.1.10-1PGSTY~bookworm_arm64.deb
| PIGSTY 0.1.10 d12.aarch64.pg17 : postgresql-17-pg-when postgresql-17-pg-when_0.1.10-1PGSTY~bookworm_arm64.deb
| PIGSTY 0.1.10 d12.aarch64.pg16 : postgresql-16-pg-when postgresql-16-pg-when_0.1.10-1PGSTY~bookworm_arm64.deb
| PIGSTY 0.1.10 d12.aarch64.pg15 : postgresql-15-pg-when postgresql-15-pg-when_0.1.10-1PGSTY~bookworm_arm64.deb
| PIGSTY 0.1.10 d12.aarch64.pg14 : postgresql-14-pg-when postgresql-14-pg-when_0.1.10-1PGSTY~bookworm_arm64.deb
|
| d13.x86_64 | PIGSTY 0.1.10 d13.x86_64.pg18 : postgresql-18-pg-when postgresql-18-pg-when_0.1.10-1PGSTY~trixie_amd64.deb
| PIGSTY 0.1.10 d13.x86_64.pg17 : postgresql-17-pg-when postgresql-17-pg-when_0.1.10-1PGSTY~trixie_amd64.deb
| PIGSTY 0.1.10 d13.x86_64.pg16 : postgresql-16-pg-when postgresql-16-pg-when_0.1.10-1PGSTY~trixie_amd64.deb
| PIGSTY 0.1.10 d13.x86_64.pg15 : postgresql-15-pg-when postgresql-15-pg-when_0.1.10-1PGSTY~trixie_amd64.deb
| PIGSTY 0.1.10 d13.x86_64.pg14 : postgresql-14-pg-when postgresql-14-pg-when_0.1.10-1PGSTY~trixie_amd64.deb
|
| d13.aarch64 | PIGSTY 0.1.10 d13.aarch64.pg18 : postgresql-18-pg-when postgresql-18-pg-when_0.1.10-1PGSTY~trixie_arm64.deb
| PIGSTY 0.1.10 d13.aarch64.pg17 : postgresql-17-pg-when postgresql-17-pg-when_0.1.10-1PGSTY~trixie_arm64.deb
| PIGSTY 0.1.10 d13.aarch64.pg16 : postgresql-16-pg-when postgresql-16-pg-when_0.1.10-1PGSTY~trixie_arm64.deb
| PIGSTY 0.1.10 d13.aarch64.pg15 : postgresql-15-pg-when postgresql-15-pg-when_0.1.10-1PGSTY~trixie_arm64.deb
| PIGSTY 0.1.10 d13.aarch64.pg14 : postgresql-14-pg-when postgresql-14-pg-when_0.1.10-1PGSTY~trixie_arm64.deb
|
| u22.x86_64 | PIGSTY 0.1.10 u22.x86_64.pg18 : postgresql-18-pg-when postgresql-18-pg-when_0.1.10-1PGSTY~jammy_amd64.deb
| PIGSTY 0.1.10 u22.x86_64.pg17 : postgresql-17-pg-when postgresql-17-pg-when_0.1.10-1PGSTY~jammy_amd64.deb
| PIGSTY 0.1.10 u22.x86_64.pg16 : postgresql-16-pg-when postgresql-16-pg-when_0.1.10-1PGSTY~jammy_amd64.deb
| PIGSTY 0.1.10 u22.x86_64.pg15 : postgresql-15-pg-when postgresql-15-pg-when_0.1.10-1PGSTY~jammy_amd64.deb
| PIGSTY 0.1.10 u22.x86_64.pg14 : postgresql-14-pg-when postgresql-14-pg-when_0.1.10-1PGSTY~jammy_amd64.deb
|
| u22.aarch64 | PIGSTY 0.1.10 u22.aarch64.pg18 : postgresql-18-pg-when postgresql-18-pg-when_0.1.10-1PGSTY~jammy_arm64.deb
| PIGSTY 0.1.10 u22.aarch64.pg17 : postgresql-17-pg-when postgresql-17-pg-when_0.1.10-1PGSTY~jammy_arm64.deb
| PIGSTY 0.1.10 u22.aarch64.pg16 : postgresql-16-pg-when postgresql-16-pg-when_0.1.10-1PGSTY~jammy_arm64.deb
| PIGSTY 0.1.10 u22.aarch64.pg15 : postgresql-15-pg-when postgresql-15-pg-when_0.1.10-1PGSTY~jammy_arm64.deb
| PIGSTY 0.1.10 u22.aarch64.pg14 : postgresql-14-pg-when postgresql-14-pg-when_0.1.10-1PGSTY~jammy_arm64.deb
|
| u24.x86_64 | PIGSTY 0.1.10 u24.x86_64.pg18 : postgresql-18-pg-when postgresql-18-pg-when_0.1.10-1PGSTY~noble_amd64.deb
| PIGSTY 0.1.10 u24.x86_64.pg17 : postgresql-17-pg-when postgresql-17-pg-when_0.1.10-1PGSTY~noble_amd64.deb
| PIGSTY 0.1.10 u24.x86_64.pg16 : postgresql-16-pg-when postgresql-16-pg-when_0.1.10-1PGSTY~noble_amd64.deb
| PIGSTY 0.1.10 u24.x86_64.pg15 : postgresql-15-pg-when postgresql-15-pg-when_0.1.10-1PGSTY~noble_amd64.deb
| PIGSTY 0.1.10 u24.x86_64.pg14 : postgresql-14-pg-when postgresql-14-pg-when_0.1.10-1PGSTY~noble_amd64.deb
|
| u24.aarch64 | PIGSTY 0.1.10 u24.aarch64.pg18 : postgresql-18-pg-when postgresql-18-pg-when_0.1.10-1PGSTY~noble_arm64.deb
| PIGSTY 0.1.10 u24.aarch64.pg17 : postgresql-17-pg-when postgresql-17-pg-when_0.1.10-1PGSTY~noble_arm64.deb
| PIGSTY 0.1.10 u24.aarch64.pg16 : postgresql-16-pg-when postgresql-16-pg-when_0.1.10-1PGSTY~noble_arm64.deb
| PIGSTY 0.1.10 u24.aarch64.pg15 : postgresql-15-pg-when postgresql-15-pg-when_0.1.10-1PGSTY~noble_arm64.deb
| PIGSTY 0.1.10 u24.aarch64.pg14 : postgresql-14-pg-when postgresql-14-pg-when_0.1.10-1PGSTY~noble_arm64.deb
|
| u26.x86_64 | PIGSTY 0.1.10 u26.x86_64.pg18 : postgresql-18-pg-when postgresql-18-pg-when_0.1.10-1PGSTY~resolute_amd64.deb
| PIGSTY 0.1.10 u26.x86_64.pg17 : postgresql-17-pg-when postgresql-17-pg-when_0.1.10-1PGSTY~resolute_amd64.deb
| PIGSTY 0.1.10 u26.x86_64.pg16 : postgresql-16-pg-when postgresql-16-pg-when_0.1.10-1PGSTY~resolute_amd64.deb
| PIGSTY 0.1.10 u26.x86_64.pg15 : postgresql-15-pg-when postgresql-15-pg-when_0.1.10-1PGSTY~resolute_amd64.deb
| PIGSTY 0.1.10 u26.x86_64.pg14 : postgresql-14-pg-when postgresql-14-pg-when_0.1.10-1PGSTY~resolute_amd64.deb
|
| u26.aarch64 | PIGSTY 0.1.10 u26.aarch64.pg18 : postgresql-18-pg-when postgresql-18-pg-when_0.1.10-1PGSTY~resolute_arm64.deb
| PIGSTY 0.1.10 u26.aarch64.pg17 : postgresql-17-pg-when postgresql-17-pg-when_0.1.10-1PGSTY~resolute_arm64.deb
| PIGSTY 0.1.10 u26.aarch64.pg16 : postgresql-16-pg-when postgresql-16-pg-when_0.1.10-1PGSTY~resolute_arm64.deb
| PIGSTY 0.1.10 u26.aarch64.pg15 : postgresql-15-pg-when postgresql-15-pg-when_0.1.10-1PGSTY~resolute_arm64.deb
| PIGSTY 0.1.10 u26.aarch64.pg14 : postgresql-14-pg-when postgresql-14-pg-when_0.1.10-1PGSTY~resolute_arm64.deb
|
构建
您可以使用 pig build 命令构建 pg_when 扩展的 RPM / DEB 包:
安装
您可以直接安装 pg_when 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
使用 pig 或者是 apt/yum/dnf 安装扩展:
安装
pig
dnf
apt
创建扩展:
用法
来源:
- PGXN 上的 pg_when 0.1.10
- pg_when 0.1.10 README
- pg_when 0.1.10 Cargo 清单
- pg_when 0.1.10 control 文件
- pg_when 0.1.10 导出函数源码
- pg_when 0.1.10 相对日期实现
pg_when 0.1.10 解析受限的自然语言日期与时间表达式,返回 PostgreSQL timestamptz,或按指定精度返回 Unix epoch 值。
查询结构
查询可包含日期、时间和时区,并通过 at 与 in 连接:
省略时区时,解析器使用 UTC。支持的输入包括 tomorrow、last month、5 days ago 等相对日期,常见数字及月份名称形式的准确日期,noon、midnight、next hour 等相对时间,时钟时间、IANA 时区名与 UTC 偏移量。
函数索引
when_is(text)返回timestamptz。seconds_at(text)返回 Unix epoch 秒数。millis_at(text)返回 Unix epoch 毫秒数。micros_at(text)返回 Unix epoch 微秒数。nanos_at(text)返回 Unix epoch 纳秒数。
兼容性与边界
- 解析器实现的是文档中定义的语法,并非通用自然语言解释器。
- 上游 0.1.10 提供 PostgreSQL 13–18 的构建特性并固定使用 pgrx 0.18.1;Pigsty 软件包覆盖 PostgreSQL 14–18,并应用锁定依赖的 pgrx 0.19.1 兼容更新。
pg_when不可重定位,其 control 文件要求超级用户执行CREATE EXTENSION。- 非法文本会触发错误。这五个函数都声明为
STRICT,因此空值输入返回空值;当 epoch 纳秒数无法放入bigint时,nanos_at(text)也会报错。 - 0.1.10 的 SQL 函数声明为
IMMUTABLE,但now、tomorrow、5 days ago等相对表达式会读取当前时钟。不要把相对输入调用用于表达式索引或生成列,也不要假定它们会在缓存计划中重新求值;只有完整指定日期、时间与时区的输入才与当前时间无关。
这个页面对您有帮助吗?
感谢反馈,我们会据此改进这篇文档。
哪里没有解决?(可选)