Changelog
格式參考 Keep a Changelog,版本號遵循 SemVer。
Unreleased
0.2.0 - 2026-10-23
升級:ALTER EXTENSION pg_nanotime UPDATE TO '0.2.0';(只支援 PostgreSQL 17 與 18)。
新增
sum(nanointerval)、avg(nanointerval)聚合:int128 精確累加,溢位時報錯nanointerval out of range;avg四捨五入到奈秒(剛好一半時遠離 0,與nanointerval / bigint一致);忽略 NULL,沒有資料時回傳 NULL;支援平行查詢與視窗函式移動聚合。新增回歸測試agg。- 擴充套件版本升到 0.2.0:新增升級腳本
pg_nanotime--0.1.0--0.2.0.sql,可用ALTER EXTENSION pg_nanotime UPDATE從 0.1.0 升級;CI 會檢查升級後與全新安裝的物件一致。 abs(nanointerval)(範圍對稱,最小值也能取負,不會溢位)。generate_series(start, stop, step nanointerval),支援nanotimestamptz、nanotimestamptz8、nanotimestamp:與 PostgreSQL 語意一致(包含 stop、step 0 報錯、負 step 往回數),在型別範圍邊緣不會繞回;附 planner support 函式,常數參數時列數估計精確。nanointerval_from_ns(double precision)(四捨五入遠離 0;NaN/Infinity 報明確錯誤;超過 253 ns 會失去精度,已寫入文件)與精確的nanointerval_from_ns(bigint)(避免整數參數被解析到 double precision 版本)。新增回歸測試series。- 測試:新增回歸測試
coverage,補上 COVERAGE.md 列出的 6 個缺口(interval + nanotimestamptz/nanotimestamptz8、nanotimestamptz8 - interval、bigint * nanointerval、nanointerval / bigint、其他 3 型別的<>、percentile_disc直接用在 nanointerval)。沒有程式碼變更。 - 文件:新增
docs/COVERAGE.md功能與測試涵蓋表(所有物件、對應回歸測試、驗證版本、案例、缺口、變更影響指南);CONTRIBUTING 規定功能變更要在同一個 commit 更新它。 - 文件:說明沒有
numeric → nanointerval轉型,請用nanointerval_from_ns(numeric)。 tools/check_examples.py與make check-docs:檢查docs/EXAMPLES.md的程式碼區塊與examples回歸測試逐行一致。- GitHub Actions「Docs examples」流程:範例文件或測試變動時自動執行上述檢查(不需安裝 PostgreSQL)。
修正
nanointerval_from_ns('NaN'::numeric)與 ±Infinity 改報cannot convert NaN to nanointerval/cannot convert infinity to nanointerval,不再是nanointerval out of range。- 文件:GUIDE.md 誤寫百分位數要先轉 bigint;實際上
percentile_disc可直接用在nanointerval,只有percentile_cont不行。 - 文件:設了
partition_func的 hypertable,drop_chunks的older_than必須是 bigint(::nanotimestamptz8::bigint);兩種情況都列出。 - 文件:
nanotime_migrate_column的預設目標是 16 Bnanotimestamptz(bigint 來源也一樣),要 8 B 需傳入'nanotimestamptz8'。 - 文件:
extract_ns('nanosecond', ts)與 PG 的 microsecond 欄位一樣包含整數秒,並附範例。 - 文件:說明擴充套件不會阻止混用
now()/timestamptz(隱式轉型),這是使用慣例。 - 文件:設了
partition_func時 TimescaleDB 預設索引建在分區運算式上,建議另建(ts DESC)索引;TECHNICAL.md 新增索引支援矩陣。
0.1.0 - 2026-10-23
第一個版本,只支援 PostgreSQL 17 與 18。
新增
- 型別:
nanotimestamptz:16 B{int64 sec, int64 nsec},範圍與 timestamptz 相同。nanotimestamptz8:8 B,int64 Unix 奈秒,範圍 1677–2262。nanotimestamp:不含時區。nanointerval:固定奈秒。
- I/O:text 為 ISO 8601、9 位小數;也支援 binary send/recv。
- 比較、min/max、B-tree、hash、BRIN minmax。
- 轉型:與 timestamptz、timestamp、date、interval、bigint 互轉(bigint 只能明確轉型),轉成微秒時一律 floor。
- 算術、
time_bucket_ns、date_trunc、extract_ns、timezone();所有越界情況都會報錯。 - 時鐘:
clock_ns、now_ns、statement_ns,以及 8 B 版本。clock_ns_monotonic:每個連線內嚴格遞增。clock_ns_global:跨連線嚴格遞增,需要shared_preload_libraries。nanotime_clock_status()、nanotime_reset_stats()。- GUC
nanotime.clock_source(realtime/tai)。
- 遷移:
nanotime_migration_expr、nanotime_migrate_column、nanotime_suspect_count。 - TimescaleDB:
ns()、nanotime_now_int8()、nanotime_part、nanotime_part_notz、nanotime_part8。 - 15 組回歸測試(其中 timescale 為選用),包含驗證 docs/EXAMPLES.md 的
examples;另有 GitHub Actions CI、PGXN META.json、make dist。 - 文件:README 改寫成給一般使用者看的版本;原 README 內容移到
docs/TECHNICAL.md;新增docs/GUIDE.md(依情境的使用指南)與docs/EXAMPLES.md(實際執行的實例)。