Skip to main content

sea_orm_timescale/
lib.rs

1//! # sea-orm-timescale
2//!
3//! TimescaleDB extension for Sea-ORM providing:
4//! - **Query functions**: `time_bucket()`, `time_bucket_gapfill()`, `first()`, `last()`, `locf()`, `histogram()`
5//! - **Migration helpers**: Create hypertables, enable compression, set retention policies, create continuous aggregates
6//! - **Type-safe intervals**: Parse and represent PostgreSQL intervals
7//!
8//! ## Quick Start
9//!
10//! ```ignore
11//! use sea_orm_timescale::{functions::time_bucket, types::Interval};
12//! use sea_orm::entity::prelude::*;
13//!
14//! // In a migration:
15//! use sea_orm_timescale::migration::create_hypertable;
16//! use sea_orm_timescale::types::HypertableConfig;
17//!
18//! create_hypertable(&db, &HypertableConfig {
19//!     table_name: "readings".into(),
20//!     time_column: "time".into(),
21//!     chunk_interval: Some(Interval::Days(7)),
22//!     if_not_exists: true,
23//! }).await?;
24//!
25//! // In a query:
26//! let hourly = readings::Entity::find()
27//!     .select_only()
28//!     .column_as(time_bucket(&Interval::Hours(1), readings::Column::Time), "bucket")
29//!     .column_as(Expr::col(readings::Column::Value).avg(), "avg_value")
30//!     .group_by(time_bucket(&Interval::Hours(1), readings::Column::Time))
31//!     .into_model::<HourlyAvg>()
32//!     .all(&db).await?;
33//! ```
34
35pub mod functions;
36pub mod migration;
37pub mod types;