pg_when
PostgreSQL 自然语言时间解析扩展
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_when | 0.1.9 | TIME | MIT | Rust |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 1120 | pg_when | 否 | 是 | 否 | 是 | 否 | 否 | - |
manually upgraded PGRX from 0.15.0 to 0.17.0 by Vonng
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.1.9 | 1817161514 | pg_when | - |
| RPM | PIGSTY | 0.1.9 | 1817161514 | pg_when_$v | - |
| DEB | PIGSTY | 0.1.9 | 1817161514 | postgresql-$v-pg-when | - |
构建
您可以使用 pig build 命令构建 pg_when 扩展的 RPM / DEB 包:
pig build pkg pg_when # 构建 RPM / DEB 包
安装
您可以直接安装 pg_when 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pg_when; # 当前活跃 PG 版本安装
pig ext install -y pg_when -v 18 # PG 18
pig ext install -y pg_when -v 17 # PG 17
pig ext install -y pg_when -v 16 # PG 16
pig ext install -y pg_when -v 15 # PG 15
pig ext install -y pg_when -v 14 # PG 14
dnf install -y pg_when_18 # PG 18
dnf install -y pg_when_17 # PG 17
dnf install -y pg_when_16 # PG 16
dnf install -y pg_when_15 # PG 15
dnf install -y pg_when_14 # PG 14
apt install -y postgresql-18-pg-when # PG 18
apt install -y postgresql-17-pg-when # PG 17
apt install -y postgresql-16-pg-when # PG 16
apt install -y postgresql-15-pg-when # PG 15
apt install -y postgresql-14-pg-when # PG 14
创建扩展:
CREATE EXTENSION pg_when;
用法
来源:README, Cargo.toml version 0.1.9, META.json
pg-when 解析受限的自然语言时间表达式,并返回 PostgreSQL timestamp with time zone,或以不同精度返回 Unix epoch 值。
CREATE EXTENSION pg_when;
SELECT when_is('next friday at 8:00 pm in America/New_York');
SELECT seconds_at('next friday at 8:00 pm in America/New_York');
SELECT millis_at('next friday at 8:00 pm in America/New_York');
SELECT micros_at('next friday at 8:00 pm in America/New_York');
SELECT nanos_at('next friday at 8:00 pm in America/New_York');
支持的查询形状
解析器接受最多三个部分:
SELECT when_is('<date> at <time> in <timezone>');
SELECT when_is('<date>');
SELECT when_is('<time> in <timezone>');
SELECT when_is('<date> at <time>');
如果没有提供 timezone,上游说明默认是 UTC。
常见输入
- relative dates:
today、tomorrow、last month、this friday、5 days ago、in 2 years - exact dates:
YYYY-MM-DD、DD/MM/YYYY、January 10, 2004、10 Jan 2004 - relative times:
noon、midnight、morning、evening、next hour - exact times:
8:30 pm、15:45 - time zones:
America/New_York、Europe/London、UTC-08:00、UTC+05:30
示例
SELECT when_is('5 days ago at this hour in Asia/Tokyo');
SELECT when_is('in 2 months at midnight in UTC-8');
SELECT when_is('December 31, 2026 at evening');
注意事项
- 扩展面向上面记录的 grammar,不是任意英文解析器。
- 上游仍列出 PostgreSQL 13 到 18 的源码/runtime 支持和 Docker image 示例,但本仓库 package matrix 仅为 PostgreSQL 14 到 18;不要假设 Pigsty 为 PostgreSQL 13 提供包。
- 上游
Cargo.toml当前固定pgrx0.15.0;本仓库 package metadata 记录了手工升级到pgrx0.17.0。