zerodds-durability-store-postgres 1.0.0-rc.6

PostgreSQL cold adapter for the ZeroDDS Durability-Service (ADR 0009): the shared/long-term PERSISTENT tier for large fleets, with optional TimescaleDB hypertable partitioning. Implements zerodds-durability-store::DurabilityStore.
Documentation

zerodds-durability-store-postgres

PostgreSQL cold adapter for the ZeroDDS Durability-Service (ADR 0009) — the shared, long-term PERSISTENT tier for large fleets, the PostgreSQL leg of the RAM/SSD/PostgreSQL tiered story.

It implements zerodds_durability_store::DurabilityStore with the same semantics as the default sqlite adapter: one row per sample, (topic, instance, sequence) is the sample identity (a reliable re-send is an idempotent replace), and retention is bounded only by the topic QoS Contract (ADR 0009 invariant 1).

use zerodds_durability_store::Contract;
use zerodds_durability_store_postgres::PostgresStore;

let store = PostgresStore::connect(
    "postgres://zerodds@db/zerodds",
    Contract::keep_all(),
)?;
# Ok::<(), zerodds_durability_store::StoreError>(())

Tiering

Wrap it in a TieredStore for a bounded RAM hot-cache in front of the shared database:

# use zerodds_durability_store::{Contract, TieredStore};
# use zerodds_durability_store_postgres::PostgresStore;
let cold = PostgresStore::connect("postgres://zerodds@db/zerodds", Contract::keep_all())?;
let store = TieredStore::new(cold, 256 * 1024 * 1024); // 256 MiB hot budget
# Ok::<(), zerodds_durability_store::StoreError>(())

Features

  • timescaledb — partition the samples table as a TimescaleDB hypertable on created_nanos (requires the extension in the target database). Sample identity is preserved by an explicit delete-then-insert on (topic, instance, sequence).

Connection security

The client connects with NoTls. Put the daemon and database on a trusted segment, or front the database with a TLS-terminating proxy.

Analytics

Connect to the same database with any SQL/BI tool; the schema is stable and documented in the crate docs (ADR 0009: adapters expose their own native read interface alongside the DDS path).