ToolUp.TimeSeriesStores.Timescale
0.34.1
Prefix Reserved
dotnet add package ToolUp.TimeSeriesStores.Timescale --version 0.34.1
NuGet\Install-Package ToolUp.TimeSeriesStores.Timescale -Version 0.34.1
<PackageReference Include="ToolUp.TimeSeriesStores.Timescale" Version="0.34.1" />
<PackageVersion Include="ToolUp.TimeSeriesStores.Timescale" Version="0.34.1" />
<PackageReference Include="ToolUp.TimeSeriesStores.Timescale" />
paket add ToolUp.TimeSeriesStores.Timescale --version 0.34.1
#r "nuget: ToolUp.TimeSeriesStores.Timescale, 0.34.1"
#:package ToolUp.TimeSeriesStores.Timescale@0.34.1
#addin nuget:?package=ToolUp.TimeSeriesStores.Timescale&version=0.34.1
#tool nuget:?package=ToolUp.TimeSeriesStores.Timescale&version=0.34.1
ToolUp.TimeSeriesStores.Timescale
TimescaleDB / PostgreSQL-backed ITimeSeriesStore for ToolUp.Platform
(Phase 161). High-frequency numeric/analytical series (IoT readings,
operational metrics, financial ticks) persisted over Npgsql, with range
queries pushed to the engine and downsampling via Timescale's time_bucket.
GP 1 — the Npgsql dependency is isolated to this companion; it never reaches
ToolUp.Platform.*. GP 2 — Npgsql is MIT-licensed (no paid default).
Server-only companion.
Schema (provision before use)
The store reads/writes one table — for production make it a Timescale
hypertable on ts:
CREATE TABLE toolup_timeseries (
scope text NOT NULL,
series text NOT NULL,
ts timestamptz NOT NULL,
value double precision NOT NULL);
-- Production: turn it into a hypertable (TimescaleDB extension).
SELECT create_hypertable('toolup_timeseries', 'ts');
CREATE INDEX ON toolup_timeseries (scope, series, ts DESC);
first(value, ts) / last(value, ts) (used for the First / Last
aggregations) are TimescaleDB aggregates — install the extension. The other
aggregations (Average/Sum/Min/Max/Count) are plain PostgreSQL and
work on vanilla Postgres too. The table name is overridable via
createWithTable.
Quick start
open Npgsql
open ToolUp.TimeSeriesStores.Timescale
let dataSource = NpgsqlDataSource.Create "Host=...;Database=...;Username=...;Password=..."
let store = TimescaleTimeSeriesStore.create dataSource
// Wire it as the deployment's ITimeSeriesStore:
// ServerConfig.TimeSeriesStore = CustomTimeSeriesStore
// services.AddSingleton<ITimeSeriesStore>(store)
time_bucket(bucket, ts, origin => from) aligns buckets to the query's
from bound, so this backend's downsample output is byte-identical to the
in-memory default's TimeSeriesDownsample.apply — both pass the same
ITimeSeriesStoreContract conformance pack.
Verification
The store requires a live PostgreSQL/TimescaleDB (no offline fake). Mirrors
the env-gated live-arm convention of the storage / secret companions. The
ITimeSeriesStoreContract pack runs against this store in
ToolUp.Platform.Tests when TOOLUP_TIMESCALE_CONN is set to a connection
string (the test provisions + truncates a scratch toolup_timeseries
table); unset, the arm reports skipped, so a fresh checkout is green without
a database. The in-memory default runs the same pack always-on.
License
Apache-2.0.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- FSharp.Core (>= 10.1.300)
- Npgsql (>= 10.0.3)
- ToolUp.Platform.Core (>= 0.34.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.34.1 | 0 | 10/27/2026 |
| 0.34.0 | 34 | 10/26/2026 |
| 0.33.0 | 46 | 10/25/2026 |
| 0.32.0 | 47 | 10/24/2026 |
| 0.31.0 | 47 | 10/22/2026 |
| 0.30.0 | 50 | 10/20/2026 |
| 0.29.0 | 87 | 10/19/2026 |
| 0.28.0 | 84 | 10/19/2026 |
| 0.27.0 | 86 | 10/16/2026 |
| 0.26.0 | 87 | 10/12/2026 |
| 0.25.1 | 89 | 10/9/2026 |
| 0.24.1 | 91 | 10/6/2026 |
| 0.23.0 | 102 | 9/23/2026 |
| 0.22.0 | 115 | 8/27/2026 |
| 0.21.0 | 124 | 8/26/2026 |
| 0.20.1 | 117 | 8/20/2026 |
| 0.20.0 | 114 | 8/19/2026 |