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;