Sling Academy
Home/PostgreSQL/PostgreSQL with TimescaleDB: Building a Time-Series API

PostgreSQL with TimescaleDB: Building a Time-Series API

Last updated: December 21, 2024

Building a time-series API with PostgreSQL augmented by TimescaleDB allows developers to efficiently manage and query time-series data. TimescaleDB is a PostgreSQL extension that optimizes and extends its capabilities, particularly for handling time-series scenarios, offering improved performance and scale.

Why Use TimescaleDB with PostgreSQL?

PostgreSQL is renowned for its robust architecture, scalability, and extensibility. TimescaleDB enhances PostgreSQL, focusing on time-series data, which is key for applications handling IoT, DevOps, financial analysis, and similar domains. The use of hypertables enables massive scale and performance gains by subdividing data into chunks, improving querying efficiency.

Getting Started

First, you need to ensure both PostgreSQL and TimescaleDB are installed. For most systems, TimescaleDB can be added as a simple extension.

# Install TimescaleDB
$ sudo apt install timescaledb-postgresql-12
# Enable TimescaleDB
$ timescaledb-tune

After installation, connect to your PostgreSQL server and create a new database dedicated to your time-series data.

-- Connect to PostgreSQL
\c postgres

-- Create a new database
CREATE DATABASE timeseries_db;

Creating a Hypertable

A fundamental concept in TimescaleDB is the hypertable, the core abstraction for storing time-series data. Start by creating a standard table and then convert it into a hypertable. For example, if offering a service to log temperature sensor data, your initial SQL might look like this:

-- Connect to the timeseries database
\c timeseries_db

-- Create table for sensor data
CREATE TABLE sensor_data (
    time TIMESTAMPTZ NOT NULL,
    location TEXT NOT NULL,
    temperature DOUBLE PRECISION NOT NULL
);

Transform this regular table into a hypertable. The 'time' column is required to be the primary partition for time-series data.

-- Enable TimescaleDB extension
CREATE EXTENSION IF NOT EXISTS timescaledb;

-- Convert table into hypertable
SELECT create_hypertable('sensor_data', 'time');

Querying Time-Series Data

One of the key features of TimescaleDB is its powerful query capabilities for time-series analysis. For example, aggregate functions, continuous aggregates, and advanced time-bucket capabilities offer rich querying experiences:

-- Query the average temperature by minute
SELECT time_bucket('1 minute', time) AS bucket,
        avg(temperature) as avg_temp
FROM sensor_data
WHERE location = 'warehouse'
GROUP BY bucket
ORDER BY bucket DESC;

TimescaleDB optimizes queries involving times by leveraging its inherent time-ordered storage.

Building the API

To expose the data available in your TimescaleDB database, you can build a REST API using a language/framework of your choice. Python with Flask is a popular route for ease of setup and flexibility.

from flask import Flask, jsonify
import psycopg2

app = Flask(__name__)

# Connect to your postgres DB
conn = psycopg2.connect("dbname=timeseries_db user=postgres")

@app.route('/api/temperature')
def get_temperatures():
    cursor = conn.cursor()
    cursor.execute("SELECT time, location, temperature FROM sensor_data ORDER BY time DESC LIMIT 100;")
    records = cursor.fetchall()
    cursor.close()
    return jsonify(records)

if __name__ == '__main__':
    app.run(debug=True)

The API can be expanded with more endpoints to support more sophisticated queries using plan params through Flask's routing.

Conclusion

By integrating PostgreSQL with TimescaleDB, developers significantly enhance their ability to manage time-series data efficiently. The combination of PostgreSQL's proven reliability and the extended time-series capabilities presented by TimescaleDB provides a solid platform for anyone looking to venture into this swift-growing field. Implementing a capable REST API offers accessibility to the data, empowering different applications and services to perform real-time data analytics and management seamlessly.

Next Article: Best Practices for Schema Design in PostgreSQL with TimescaleDB

Previous Article: How to Use PostgreSQL and TimescaleDB for Event Tracking

Series: PostgreSQL Tutorials: From Basic to Advanced

PostgreSQL

You May Also Like

  • PostgreSQL with TimescaleDB: Querying Time-Series Data with SQL
  • PostgreSQL Full-Text Search with Boolean Operators
  • Filtering Stop Words in PostgreSQL Full-Text Search
  • PostgreSQL command-line cheat sheet
  • How to Perform Efficient Rolling Aggregations with TimescaleDB
  • PostgreSQL with TimescaleDB: Migrating from Traditional Relational Models
  • Best Practices for Maintaining PostgreSQL and TimescaleDB Databases
  • PostgreSQL with TimescaleDB: Building a High-Performance Analytics Engine
  • Integrating PostgreSQL and TimescaleDB with Machine Learning Models
  • PostgreSQL with TimescaleDB: Implementing Temporal Data Analysis
  • Combining PostgreSQL, TimescaleDB, and Airflow for Data Workflows
  • PostgreSQL with TimescaleDB: Visualizing Real-Time Data with Superset
  • Using PostgreSQL with TimescaleDB for Energy Consumption Analysis
  • PostgreSQL with TimescaleDB: How to Query Massive Datasets Efficiently
  • Best Practices for Writing Time-Series Queries in PostgreSQL with TimescaleDB
  • PostgreSQL with TimescaleDB: Implementing Batch Data Processing
  • Using PostgreSQL with TimescaleDB for Network Traffic Analysis
  • PostgreSQL with TimescaleDB: Troubleshooting Common Performance Issues
  • Building an IoT Data Pipeline with PostgreSQL and TimescaleDB