TigerData logo
TigerData logo
  • Product

    Product

    Tiger Cloud

    Robust elastic cloud platform for startups and enterprises

    TimescaleDB Enterprise

    Self-managed TimescaleDB for on-prem, edge and private cloud

    Open source

    TimescaleDB

    Time-series, real-time analytics and events on Postgres

    Search

    Vector and keyword search on Postgres

  • Industry

    Data Centers

    Energy & Utilities

    Oilfield Services

    Smart Manufacturing

    Crypto

  • Docs
  • Pricing
  • Developer Hub

    Changelog

    Benchmarks

    Blog

    Community

    Customer Stories

    Events

    Support

    Integrations

    Launch Hub

  • Company

    About

    TigerData logo

    Timescale

    Partners

    Security

    Careers

View on GitHub (opens in a new tab)

Contact usStart a free trial
Home
Tiger MCP vs. a Generic Postgres MCP Server
Time Series Forecasting with PostgreSQL: Methods, SQL Examples, and When to Use PythonTime-Series Analysis and Forecasting With Python Why Consider Using PostgreSQL for Time-Series Data?Time-Series Analysis in RWhat Is Temporal Data?Understanding Autoregressive Time-Series ModelingAlternatives to TimescaleStationary Time-Series AnalysisWhat Are Open-Source Time-Series Databases—Understanding Your OptionsIs Your Data Time Series? Data Types Supported by PostgreSQL and TimescaleUnderstanding Database Workloads: Variable, Bursty, and Uniform PatternsThe Best Time-Series Databases Compared (2026)Time Series Anomaly Detection: Methods, SQL, and Real-Time ImplementationAWS Timestream Alternatives: Your Migration Options After LiveAnalyticsTime-Series Database: What It Is, How It Works, and When You Need OneWhat Is a Time Series and How Is It Used?How to Work With Time Series in Python?Tools for Working With Time-Series Analysis in PythonGuide to Time-Series Analysis in PythonCreating a Fast Time-Series Graph With Postgres Materialized Views
OpenTelemetry Backend: Choosing Metrics Storage That Doesn't Lock You InGPU Cluster Monitoring: The Database Behind AI Infrastructure TelemetryWhat Is DCIM Software, and What Database Does It Use?Data Center Power Monitoring: The Database Layer Behind PUE, PDU, and Sustainability MetricsPrometheus Long-Term Storage: Thanos, Mimir, VictoriaMetrics, and PostgreSQL Compared
Understanding PostgreSQLUnderstanding SQL Aggregate FunctionsUnderstanding the rank() and dense_rank() Functions in PostgreSQLUnderstanding percentile_cont() and percentile_disc() in PostgreSQLStructured vs. Semi-Structured vs. Unstructured Data in PostgreSQLOptimizing Your Database: A Deep Dive into PostgreSQL Data TypesPostgres Cheat SheetHow to Address ‘Error: Could Not Resize Shared Memory Segment’ Understanding the Postgres extract() FunctionUnderstanding FROM in PostgreSQL (With Examples)How to Install PostgreSQL on LinuxHow to Install PostgreSQL on MacOSUnderstanding FILTER in PostgreSQL (With Examples)Understanding HAVING in PostgreSQL (With Examples)5 Common Connection Errors in PostgreSQL and How to Solve ThemUnderstanding GROUP BY in PostgreSQL (With Examples)How to Fix No Partition of Relation Found for Row in Postgres DatabasesUnderstanding LIMIT in PostgreSQL (With Examples)How to Fix Transaction ID Wraparound ExhaustionUnderstanding ORDER BY in PostgreSQL (With Examples)Understanding PostgreSQL FunctionsUnderstanding WINDOW in PostgreSQL (With Examples)Understanding PostgreSQL WITHIN GROUPPostgreSQL Mathematical Functions: Enhancing Coding EfficiencyUnderstanding DISTINCT in PostgreSQL (With Examples)Understanding WHERE in PostgreSQL (With Examples)Understanding OFFSET in PostgreSQL (With Examples)Understanding the Postgres string_agg FunctionUnderstanding PostgreSQL SELECTWhat Characters Are Allowed in PostgreSQL Strings?What Is Data Transformation, and Why Is It Important?What Is Data Compression and How Does It Work?Using PostgreSQL UPDATE With JOINUnderstanding PostgreSQL User-Defined FunctionsUnderstanding Foreign Keys in PostgreSQLData Processing With PostgreSQL Window FunctionsUnderstanding PostgreSQL Date and Time FunctionsWhat Is a PostgreSQL Full Outer Join?What Is a PostgreSQL Inner Join?What Is a PostgreSQL Left Join? And a Right Join?PostgreSQL Join Type TheoryA Guide to PostgreSQL ViewsStrategies for Improving Postgres JOIN PerformanceUnderstanding PostgreSQL's COALESCE FunctionUnderstanding PostgreSQL Array FunctionsUnderstanding PostgreSQL Conditional FunctionsUsing PostgreSQL String Functions for Improved Data AnalysisPostgreSQL vs. Cassandra: The Decision Framework for Time-Series and Write-Heavy WorkloadsPostgreSQL Joins : A SummaryWhat Is a PostgreSQL Cross Join?Data Partitioning: What It Is and Why It MattersSelf-Hosted or Cloud Database? A Countryside Reflection on Infrastructure ChoicesUnderstanding ACID Compliance
Connect Your AI Coding Agent to Tiger Cloud: Setup for Cursor, Claude Code, VS Code, and MoreHow to Monitor and Optimize PostgreSQL Index PerformanceGuide to PostgreSQL PerformancePostgreSQL Performance Tuning: Designing and Implementing Your Database SchemaPostgreSQL Performance Tuning: Key ParametersPostgreSQL Performance Tuning: Optimizing Database IndexesDetermining the Optimal Postgres Partition SizeWhen to Consider Postgres PartitioningAn Intro to Data Modeling on PostgreSQLDesigning Your Database Schema: Wide vs. Narrow Postgres TablesGuide to PostgreSQL Database OperationsBest Practices for Time-Series Data Modeling: Single or Multiple Partitioned Table(s) a.k.a. Hypertables Best Practices for (Time-)Series Metadata Tables A PostgreSQL Database Replication GuideA Guide to Data Analysis on PostgreSQLHow to Query JSONB in PostgreSQLHow to Compute Standard Deviation With PostgreSQLPostgreSQL Performance Tuning: How to Size Your DatabaseSQL/JSON Data Model and JSON in SQL: A PostgreSQL PerspectiveUnderstanding PostgreSQL TablespacesTop PostgreSQL Drivers for PythonPg_partman vs. Hypertables for Postgres PartitioningExplaining PostgreSQL EXPLAINGuide to PostgreSQL Database DesignHow PostgreSQL Data Aggregation WorksBuilding a Scalable DatabaseA Guide to pg_restore (and pg_restore Example)How to Index JSONB Columns in PostgreSQLWhat Is Audit Logging and How to Enable It in PostgreSQLOptimizing Array Queries With GIN Indexes in PostgreSQLHow to Reduce Bloat in Large PostgreSQL TablesGuide to PostgreSQL SecurityHow to Query JSON Metadata in PostgreSQLRecursive Query in SQL: What It Is, and How to Write OneNavigating Growing PostgreSQL Tables With Partitioning (and More)What Is a PostgreSQL Temporary View?How to Use PostgreSQL for Data TransformationHandling Large Objects in PostgresHow to Use Psycopg2: The PostgreSQL Adapter for PythonA Guide to Scaling PostgreSQLAWS Timestream for InfluxDB Alternative: When You Need to Look FurtherHow to Migrate from AWS Timestream to PostgreSQL: A Technical GuideHow to Choose a Database: A Decision Framework for Modern ApplicationsGuide to Postgres Data Management
Time-Series Database High Availability and Disaster RecoveryBest Practices for Scaling PostgreSQLHow to Store Video in PostgreSQL Using BYTEABest Practices for Postgres PerformanceHow to Design Your PostgreSQL Database: Two Schema ExamplesBest Practices for PostgreSQL Database OperationsHow to Manage Your Data With Data Retention PoliciesBest Practices for PostgreSQL Data AnalysisBest Practices for PostgreSQL AggregationBest Practices for Postgres Database ReplicationBest Practices for Postgres Data ManagementHow to Use a Common Table Expression (CTE) in SQLHow to Use PostgreSQL for Data NormalizationTesting Postgres Ingest: INSERT vs. Batch INSERT vs. COPYBest Practices for Postgres SecurityHow to Handle High-Cardinality Data in PostgreSQLPostgreSQL Compression: Every Option, When To Use Each, and What To Expect
The Best PostgreSQL Extensions for Analytics Workloads: A Field GuidePostgreSQL Extensions: amcheckPostgreSQL Extensions: Unlocking Multidimensional Points With Cube PostgreSQL Extensions: hstorePostgreSQL Extensions: ltreePostgreSQL Extensions: Secure Your Time-Series Data With pgcryptoPostgreSQL Extensions: pg_prewarmPostgreSQL Extensions: pgRoutingPostgreSQL Extensions: pg_stat_statementsPostgreSQL Extensions: Database Testing With pgTAPPostgreSQL Extensions: Install pg_trgm for Data MatchingPostgreSQL Extensions: PL/pgSQLPostgreSQL Extensions: Using PostGIS and Timescale for Advanced Geospatial InsightsPostgreSQL Extensions: Intro to uuid-osspTurning PostgreSQL Into a Vector Database With pgvector
What Is ClickHouse and How Does It Compare to PostgreSQL and TimescaleDB for Time Series?Timescale vs. Amazon RDS PostgreSQL: Up to 350x Faster Queries, 44 % Faster Ingest, 95 % Storage Savings for Time-Series DataWhat We Learned From Benchmarking Amazon Aurora PostgreSQL ServerlessTimescaleDB vs. Amazon Timestream: 6,000x Higher Inserts, 5-175x Faster Queries, 150-220x CheaperHow to Store Time-Series Data in MongoDB and Why That’s a Bad IdeaPostgreSQL + TimescaleDB: 1,000x Faster Queries, 90 % Data Compression, and Much MoreEye or the Tiger: Benchmarking Cassandra vs. TimescaleDB for Time-Series Data
MES Data Architecture: Modeling Work Orders, Genealogy, and Historian IntegrationMeter Data Management: Why AMI Interval Data Breaks Legacy MDM SystemsGeofencing and Driver Behavior Analytics: How to Store Both in One DatabaseWhich Database for a Digital Twin? Digital Twin Database Options ComparedGrid Modernization: Why the Data Layer Decides Whether It WorksFleet Telemetry Database: How to Store and Query Vehicle Sensor Data at ScaleUnderstanding IoT (Internet of Things)A Beginner’s Guide to IIoT and Industry 4.0DERMS Database: Solving the Single Source of DER Data ProblemForecasting the Physical World: Foundation Models for Predictive MaintenanceBuilding Energy Management System: The Data Layer Behind Energy Monitoring, Sub-Metering, and M&VSmart Building Analytics: Turning BMS Telemetry Into Occupancy, Energy, and HVAC InsightEV Charging Load ManagementBuilding Management System Database: Architecture for BACnet, Modbus, and Smart Building Sensor Data at ScaleSmart Grid Data Platform: Architecting for SCADA, AMI, PMU, and DERMS Data at ScaleDigital Twin Architecture: The Database and Data Model Behind a Digital TwinCAN Bus Data Logger: Decoding DBC and J1939 Signals into PostgresPredictive Maintenance Database Architecture: Storing and Querying Sensor Data for Failure PredictionPhysical AI Telemetry: Database Architecture for Autonomous-Vehicle FleetsPlant Historian: What It Captures and Where the Analytics Layer BeginsManufacturing Analytics Database: Architecture for Real-Time Production DataRobot Fleet Telemetry: Database Architecture for AMR, Industrial Robot, and Service Robot DataData Center Monitoring: What Database Stores Your Telemetry?EV Charging Management System: Architecture, OCPP Data, and the Right DatabaseIIoT Database Requirements: Six Things Your Database Must DoWater Utilities Database: How to Store and Query SCADA, AMI, and Quality Data at ScaleWhat Is an Edge Database? On-Device Storage, Sync Patterns, and Choosing the Right StackData Historian vs. Time-Series Database: How to Choose and When to SwitchWhat Is a Data Historian?The Best Databases for IoT in 2026: A Practical ComparisonHow Hopthru Powers Real-Time Transit Analytics From a 1 TB TableStoring IoT Data: 8 Reasons Why You Should Use PostgreSQLHow to Simulate a Basic IoT Sensor Dataset on PostgreSQLFrom Ingest to Insights in Milliseconds: Everactive's Tech Transformation With TimescaleHow Ndustrial Is Providing Fast Real-Time Queries and Safely Storing Client Data With 97 % CompressionWhy You Should Use PostgreSQL for Industrial IoT Data Migrating a Low-Code IoT Platform Storing 20M Records/DayHow United Manufacturing Hub Is Introducing Open Source to ManufacturingBuilding IoT Pipelines for Faster Analytics With IoT CoreVisualizing IoT Data at Scale With Hopara and TimescaleDB
A Brief History of AI: How Did We Get Here, and What's Next?A Beginner’s Guide to Vector EmbeddingsPostgreSQL as a Vector Database: A Pgvector TutorialUsing Pgvector With PythonHow to Choose a Vector DatabaseVector Databases Are the Wrong AbstractionUnderstanding DiskANNA Guide to Cosine SimilarityStreaming DiskANN: How We Made PostgreSQL as Fast as Pinecone for Vector DataImplementing Cosine Similarity in PythonVector Database Basics: HNSWVector Database Options for AWSVector Store vs. Vector Database: Understanding the ConnectionPgvector vs. Pinecone: Vector Database Performance and Cost ComparisonHow to Build LLM Applications With Pgvector Vector Store in LangChainHow to Implement RAG With Amazon Bedrock and LangChainRAG Is More Than Just Vector SearchRefining Vector Search Queries With Time Filters in Pgvector: A TutorialUnderstanding Semantic SearchWhat Is Vector Search? Text-to-SQL: A Developer’s Zero-to-Hero GuideWhen Should You Use Full-Text Search vs. Vector Search?HNSW vs. DiskANNVector Search vs Semantic SearchBuilding AI Agents with Persistent Memory: A Unified Database ApproachNearest Neighbor Indexes: What Are IVFFlat Indexes in Pgvector and How Do They WorkPostgreSQL Hybrid Search Using Pgvector and CohereBuilding an AI Image Gallery With OpenAI CLIP, Claude Sonnet 3.5, and Pgvector
PostgreSQL OLTP: Transactions, Scale, and the Architecture That Makes It WorkHow to Choose an OLAP Database: A Practical Decision Guide (2026)Data Analytics vs. Real-Time Analytics: How to Pick Your Database (and Why It Should Be PostgreSQL)How to Choose a Real-Time Analytics DatabaseColumnar Databases vs. Row-Oriented Databases: Which to Choose?What Is the Best Database for Real-Time AnalyticsPostgreSQL as a Real-Time Analytics DatabaseUnderstanding OLAP: What It Is, How It Differs From OLTP, and Running It on PostgreSQLHow to Build an IoT Pipeline for Real-Time Analytics in PostgreSQL
Alternatives to RDSWhy Is RDS so Expensive? Understanding RDS Pricing and CostsEstimating RDS CostsHow to Migrate From AWS RDS for PostgreSQL to TimescaleAmazon Aurora vs. RDS: Understanding the Difference
5 InfluxDB Alternatives for Your Time-Series Data8 Reasons to Choose Timescale as Your InfluxDB Alternative InfluxQL, Flux, and SQL: Which Query Language Is Best? (With Cheatsheet)What InfluxDB Got WrongTimescaleDB vs. InfluxDB: Purpose Built Differently for Time-Series Data
5 Ways to Monitor Your PostgreSQL DatabaseHow to Migrate Your Data to Timescale (3 Ways)Postgres TOAST vs. Timescale CompressionBuilding Python Apps With PostgreSQL: A Developer's GuideData Visualization in PostgreSQL With Apache SupersetMore Time-Series Data Analysis, Fewer Lines of Code: Meet HyperfunctionsIs Postgres Partitioning Really That Hard? An Introduction To HypertablesPostgreSQL Materialized Views and Where to Find ThemTime-Series Downsampling: The Complete Guide to Tiered Data Resolution in SQLContinuous Aggregates: Incremental Materialized Views for Time-Series DataComplete Guide: Migrating from MongoDB to Tiger Data (Step-by-Step)Timescale Tips: Testing Your Chunk Size
Postgres cheat sheet
HomeAlternativesTime-series basicsData Center & Infrastructure TelemetryPostgres basicsPostgres guidesPostgres best practices
Home
Tiger MCP vs. a Generic Postgres MCP Server
Time Series Forecasting with PostgreSQL: Methods, SQL Examples, and When to Use PythonTime-Series Analysis and Forecasting With Python Why Consider Using PostgreSQL for Time-Series Data?Time-Series Analysis in RWhat Is Temporal Data?Understanding Autoregressive Time-Series ModelingAlternatives to TimescaleStationary Time-Series AnalysisWhat Are Open-Source Time-Series Databases—Understanding Your OptionsIs Your Data Time Series? Data Types Supported by PostgreSQL and TimescaleUnderstanding Database Workloads: Variable, Bursty, and Uniform PatternsThe Best Time-Series Databases Compared (2026)Time Series Anomaly Detection: Methods, SQL, and Real-Time ImplementationAWS Timestream Alternatives: Your Migration Options After LiveAnalyticsTime-Series Database: What It Is, How It Works, and When You Need OneWhat Is a Time Series and How Is It Used?How to Work With Time Series in Python?Tools for Working With Time-Series Analysis in PythonGuide to Time-Series Analysis in PythonCreating a Fast Time-Series Graph With Postgres Materialized Views
OpenTelemetry Backend: Choosing Metrics Storage That Doesn't Lock You InGPU Cluster Monitoring: The Database Behind AI Infrastructure TelemetryWhat Is DCIM Software, and What Database Does It Use?Data Center Power Monitoring: The Database Layer Behind PUE, PDU, and Sustainability MetricsPrometheus Long-Term Storage: Thanos, Mimir, VictoriaMetrics, and PostgreSQL Compared
Understanding PostgreSQLUnderstanding SQL Aggregate FunctionsUnderstanding the rank() and dense_rank() Functions in PostgreSQLUnderstanding percentile_cont() and percentile_disc() in PostgreSQLStructured vs. Semi-Structured vs. Unstructured Data in PostgreSQLOptimizing Your Database: A Deep Dive into PostgreSQL Data TypesPostgres Cheat SheetHow to Address ‘Error: Could Not Resize Shared Memory Segment’ Understanding the Postgres extract() FunctionUnderstanding FROM in PostgreSQL (With Examples)How to Install PostgreSQL on LinuxHow to Install PostgreSQL on MacOSUnderstanding FILTER in PostgreSQL (With Examples)Understanding HAVING in PostgreSQL (With Examples)5 Common Connection Errors in PostgreSQL and How to Solve ThemUnderstanding GROUP BY in PostgreSQL (With Examples)How to Fix No Partition of Relation Found for Row in Postgres DatabasesUnderstanding LIMIT in PostgreSQL (With Examples)How to Fix Transaction ID Wraparound ExhaustionUnderstanding ORDER BY in PostgreSQL (With Examples)Understanding PostgreSQL FunctionsUnderstanding WINDOW in PostgreSQL (With Examples)Understanding PostgreSQL WITHIN GROUPPostgreSQL Mathematical Functions: Enhancing Coding EfficiencyUnderstanding DISTINCT in PostgreSQL (With Examples)Understanding WHERE in PostgreSQL (With Examples)Understanding OFFSET in PostgreSQL (With Examples)Understanding the Postgres string_agg FunctionUnderstanding PostgreSQL SELECTWhat Characters Are Allowed in PostgreSQL Strings?What Is Data Transformation, and Why Is It Important?What Is Data Compression and How Does It Work?Using PostgreSQL UPDATE With JOINUnderstanding PostgreSQL User-Defined FunctionsUnderstanding Foreign Keys in PostgreSQLData Processing With PostgreSQL Window FunctionsUnderstanding PostgreSQL Date and Time FunctionsWhat Is a PostgreSQL Full Outer Join?What Is a PostgreSQL Inner Join?What Is a PostgreSQL Left Join? And a Right Join?PostgreSQL Join Type TheoryA Guide to PostgreSQL ViewsStrategies for Improving Postgres JOIN PerformanceUnderstanding PostgreSQL's COALESCE FunctionUnderstanding PostgreSQL Array FunctionsUnderstanding PostgreSQL Conditional FunctionsUsing PostgreSQL String Functions for Improved Data AnalysisPostgreSQL vs. Cassandra: The Decision Framework for Time-Series and Write-Heavy WorkloadsPostgreSQL Joins : A SummaryWhat Is a PostgreSQL Cross Join?Data Partitioning: What It Is and Why It MattersSelf-Hosted or Cloud Database? A Countryside Reflection on Infrastructure ChoicesUnderstanding ACID Compliance
Connect Your AI Coding Agent to Tiger Cloud: Setup for Cursor, Claude Code, VS Code, and MoreHow to Monitor and Optimize PostgreSQL Index PerformanceGuide to PostgreSQL PerformancePostgreSQL Performance Tuning: Designing and Implementing Your Database SchemaPostgreSQL Performance Tuning: Key ParametersPostgreSQL Performance Tuning: Optimizing Database IndexesDetermining the Optimal Postgres Partition SizeWhen to Consider Postgres PartitioningAn Intro to Data Modeling on PostgreSQLDesigning Your Database Schema: Wide vs. Narrow Postgres TablesGuide to PostgreSQL Database OperationsBest Practices for Time-Series Data Modeling: Single or Multiple Partitioned Table(s) a.k.a. Hypertables Best Practices for (Time-)Series Metadata Tables A PostgreSQL Database Replication GuideA Guide to Data Analysis on PostgreSQLHow to Query JSONB in PostgreSQLHow to Compute Standard Deviation With PostgreSQLPostgreSQL Performance Tuning: How to Size Your DatabaseSQL/JSON Data Model and JSON in SQL: A PostgreSQL PerspectiveUnderstanding PostgreSQL TablespacesTop PostgreSQL Drivers for PythonPg_partman vs. Hypertables for Postgres PartitioningExplaining PostgreSQL EXPLAINGuide to PostgreSQL Database DesignHow PostgreSQL Data Aggregation WorksBuilding a Scalable DatabaseA Guide to pg_restore (and pg_restore Example)How to Index JSONB Columns in PostgreSQLWhat Is Audit Logging and How to Enable It in PostgreSQLOptimizing Array Queries With GIN Indexes in PostgreSQLHow to Reduce Bloat in Large PostgreSQL TablesGuide to PostgreSQL SecurityHow to Query JSON Metadata in PostgreSQLRecursive Query in SQL: What It Is, and How to Write OneNavigating Growing PostgreSQL Tables With Partitioning (and More)What Is a PostgreSQL Temporary View?How to Use PostgreSQL for Data TransformationHandling Large Objects in PostgresHow to Use Psycopg2: The PostgreSQL Adapter for PythonA Guide to Scaling PostgreSQLAWS Timestream for InfluxDB Alternative: When You Need to Look FurtherHow to Migrate from AWS Timestream to PostgreSQL: A Technical GuideHow to Choose a Database: A Decision Framework for Modern ApplicationsGuide to Postgres Data Management
Time-Series Database High Availability and Disaster RecoveryBest Practices for Scaling PostgreSQLHow to Store Video in PostgreSQL Using BYTEABest Practices for Postgres PerformanceHow to Design Your PostgreSQL Database: Two Schema ExamplesBest Practices for PostgreSQL Database OperationsHow to Manage Your Data With Data Retention PoliciesBest Practices for PostgreSQL Data AnalysisBest Practices for PostgreSQL AggregationBest Practices for Postgres Database ReplicationBest Practices for Postgres Data ManagementHow to Use a Common Table Expression (CTE) in SQLHow to Use PostgreSQL for Data NormalizationTesting Postgres Ingest: INSERT vs. Batch INSERT vs. COPYBest Practices for Postgres SecurityHow to Handle High-Cardinality Data in PostgreSQLPostgreSQL Compression: Every Option, When To Use Each, and What To Expect
The Best PostgreSQL Extensions for Analytics Workloads: A Field GuidePostgreSQL Extensions: amcheckPostgreSQL Extensions: Unlocking Multidimensional Points With Cube PostgreSQL Extensions: hstorePostgreSQL Extensions: ltreePostgreSQL Extensions: Secure Your Time-Series Data With pgcryptoPostgreSQL Extensions: pg_prewarmPostgreSQL Extensions: pgRoutingPostgreSQL Extensions: pg_stat_statementsPostgreSQL Extensions: Database Testing With pgTAPPostgreSQL Extensions: Install pg_trgm for Data MatchingPostgreSQL Extensions: PL/pgSQLPostgreSQL Extensions: Using PostGIS and Timescale for Advanced Geospatial InsightsPostgreSQL Extensions: Intro to uuid-osspTurning PostgreSQL Into a Vector Database With pgvector
What Is ClickHouse and How Does It Compare to PostgreSQL and TimescaleDB for Time Series?Timescale vs. Amazon RDS PostgreSQL: Up to 350x Faster Queries, 44 % Faster Ingest, 95 % Storage Savings for Time-Series DataWhat We Learned From Benchmarking Amazon Aurora PostgreSQL ServerlessTimescaleDB vs. Amazon Timestream: 6,000x Higher Inserts, 5-175x Faster Queries, 150-220x CheaperHow to Store Time-Series Data in MongoDB and Why That’s a Bad IdeaPostgreSQL + TimescaleDB: 1,000x Faster Queries, 90 % Data Compression, and Much MoreEye or the Tiger: Benchmarking Cassandra vs. TimescaleDB for Time-Series Data
MES Data Architecture: Modeling Work Orders, Genealogy, and Historian IntegrationMeter Data Management: Why AMI Interval Data Breaks Legacy MDM SystemsGeofencing and Driver Behavior Analytics: How to Store Both in One DatabaseWhich Database for a Digital Twin? Digital Twin Database Options ComparedGrid Modernization: Why the Data Layer Decides Whether It WorksFleet Telemetry Database: How to Store and Query Vehicle Sensor Data at ScaleUnderstanding IoT (Internet of Things)A Beginner’s Guide to IIoT and Industry 4.0DERMS Database: Solving the Single Source of DER Data ProblemForecasting the Physical World: Foundation Models for Predictive MaintenanceBuilding Energy Management System: The Data Layer Behind Energy Monitoring, Sub-Metering, and M&VSmart Building Analytics: Turning BMS Telemetry Into Occupancy, Energy, and HVAC InsightEV Charging Load ManagementBuilding Management System Database: Architecture for BACnet, Modbus, and Smart Building Sensor Data at ScaleSmart Grid Data Platform: Architecting for SCADA, AMI, PMU, and DERMS Data at ScaleDigital Twin Architecture: The Database and Data Model Behind a Digital TwinCAN Bus Data Logger: Decoding DBC and J1939 Signals into PostgresPredictive Maintenance Database Architecture: Storing and Querying Sensor Data for Failure PredictionPhysical AI Telemetry: Database Architecture for Autonomous-Vehicle FleetsPlant Historian: What It Captures and Where the Analytics Layer BeginsManufacturing Analytics Database: Architecture for Real-Time Production DataRobot Fleet Telemetry: Database Architecture for AMR, Industrial Robot, and Service Robot DataData Center Monitoring: What Database Stores Your Telemetry?EV Charging Management System: Architecture, OCPP Data, and the Right DatabaseIIoT Database Requirements: Six Things Your Database Must DoWater Utilities Database: How to Store and Query SCADA, AMI, and Quality Data at ScaleWhat Is an Edge Database? On-Device Storage, Sync Patterns, and Choosing the Right StackData Historian vs. Time-Series Database: How to Choose and When to SwitchWhat Is a Data Historian?The Best Databases for IoT in 2026: A Practical ComparisonHow Hopthru Powers Real-Time Transit Analytics From a 1 TB TableStoring IoT Data: 8 Reasons Why You Should Use PostgreSQLHow to Simulate a Basic IoT Sensor Dataset on PostgreSQLFrom Ingest to Insights in Milliseconds: Everactive's Tech Transformation With TimescaleHow Ndustrial Is Providing Fast Real-Time Queries and Safely Storing Client Data With 97 % CompressionWhy You Should Use PostgreSQL for Industrial IoT Data Migrating a Low-Code IoT Platform Storing 20M Records/DayHow United Manufacturing Hub Is Introducing Open Source to ManufacturingBuilding IoT Pipelines for Faster Analytics With IoT CoreVisualizing IoT Data at Scale With Hopara and TimescaleDB
A Brief History of AI: How Did We Get Here, and What's Next?A Beginner’s Guide to Vector EmbeddingsPostgreSQL as a Vector Database: A Pgvector TutorialUsing Pgvector With PythonHow to Choose a Vector DatabaseVector Databases Are the Wrong AbstractionUnderstanding DiskANNA Guide to Cosine SimilarityStreaming DiskANN: How We Made PostgreSQL as Fast as Pinecone for Vector DataImplementing Cosine Similarity in PythonVector Database Basics: HNSWVector Database Options for AWSVector Store vs. Vector Database: Understanding the ConnectionPgvector vs. Pinecone: Vector Database Performance and Cost ComparisonHow to Build LLM Applications With Pgvector Vector Store in LangChainHow to Implement RAG With Amazon Bedrock and LangChainRAG Is More Than Just Vector SearchRefining Vector Search Queries With Time Filters in Pgvector: A TutorialUnderstanding Semantic SearchWhat Is Vector Search? Text-to-SQL: A Developer’s Zero-to-Hero GuideWhen Should You Use Full-Text Search vs. Vector Search?HNSW vs. DiskANNVector Search vs Semantic SearchBuilding AI Agents with Persistent Memory: A Unified Database ApproachNearest Neighbor Indexes: What Are IVFFlat Indexes in Pgvector and How Do They WorkPostgreSQL Hybrid Search Using Pgvector and CohereBuilding an AI Image Gallery With OpenAI CLIP, Claude Sonnet 3.5, and Pgvector
PostgreSQL OLTP: Transactions, Scale, and the Architecture That Makes It WorkHow to Choose an OLAP Database: A Practical Decision Guide (2026)Data Analytics vs. Real-Time Analytics: How to Pick Your Database (and Why It Should Be PostgreSQL)How to Choose a Real-Time Analytics DatabaseColumnar Databases vs. Row-Oriented Databases: Which to Choose?What Is the Best Database for Real-Time AnalyticsPostgreSQL as a Real-Time Analytics DatabaseUnderstanding OLAP: What It Is, How It Differs From OLTP, and Running It on PostgreSQLHow to Build an IoT Pipeline for Real-Time Analytics in PostgreSQL
Alternatives to RDSWhy Is RDS so Expensive? Understanding RDS Pricing and CostsEstimating RDS CostsHow to Migrate From AWS RDS for PostgreSQL to TimescaleAmazon Aurora vs. RDS: Understanding the Difference
5 InfluxDB Alternatives for Your Time-Series Data8 Reasons to Choose Timescale as Your InfluxDB Alternative InfluxQL, Flux, and SQL: Which Query Language Is Best? (With Cheatsheet)What InfluxDB Got WrongTimescaleDB vs. InfluxDB: Purpose Built Differently for Time-Series Data
5 Ways to Monitor Your PostgreSQL DatabaseHow to Migrate Your Data to Timescale (3 Ways)Postgres TOAST vs. Timescale CompressionBuilding Python Apps With PostgreSQL: A Developer's GuideData Visualization in PostgreSQL With Apache SupersetMore Time-Series Data Analysis, Fewer Lines of Code: Meet HyperfunctionsIs Postgres Partitioning Really That Hard? An Introduction To HypertablesPostgreSQL Materialized Views and Where to Find ThemTime-Series Downsampling: The Complete Guide to Tiered Data Resolution in SQLContinuous Aggregates: Incremental Materialized Views for Time-Series DataComplete Guide: Migrating from MongoDB to Tiger Data (Step-by-Step)Timescale Tips: Testing Your Chunk Size
Postgres cheat sheet
Tiger Data

Products

  • TimescaleDB
  • Tiger Cloud
  • TimescaleDB Enterprise
  • Postgres Search Stack

Industry

  • Data Centers
  • Energy & Utilities
  • Oilfield Services
  • Smart Manufacturing
  • Crypto

Support

  • Cloud Status
  • Support
  • Security
  • Terms of Service
  • Code Of Conduct

Learn

  • Documentation
  • Blog
  • Tutorials
  • Changelog
  • Success Stories

Company

  • About
  • Contact Us
  • Careers
  • Newsroom
  • Brand
  • Events

Products

  • TimescaleDB
  • Tiger Cloud
  • TimescaleDB Enterprise
  • Postgres Search Stack

Industry

  • Data Centers
  • Energy & Utilities
  • Oilfield Services
  • Smart Manufacturing
  • Crypto

Support

  • Cloud Status
  • Support
  • Security
  • Terms of Service
  • Code Of Conduct

Learn

  • Documentation
  • Blog
  • Tutorials
  • Changelog
  • Success Stories

Company

  • About
  • Contact Us
  • Careers
  • Newsroom
  • Brand
  • Events
Privacy preferencesLegalPrivacySitemap

Subscribe to the Tiger Data newsletter

Strategic Partner with Inductive Automation — Ignition

2026 (c) Timescale, Inc., d/b/a Tiger Data.
All rights reserved.

Tiger Data

2026 (c) Timescale, Inc., d/b/a Tiger Data.
All rights reserved.

Privacy preferencesLegalPrivacySitemap

By Tiger Data Team

Updated at Sep 3, 2026

Table of contents

    Building Energy Management System: The Data Layer Behind Energy Monitoring, Sub-Metering, and M&V

    Building Energy Management System (BEMS)

    By Tiger Data Team

    Updated at Sep 3, 2026

    A single building's energy submeters look manageable. One meter at the main service entrance, maybe a handful more for major equipment. Then a portfolio team decides to submeter by floor. Then by tenant. Then, because a demand-charge tariff kicked in, by circuit. Multiply that hierarchy across a portfolio and layer a 15-minute interval requirement on top, and what looked like "a few more data points" is now a different data-modeling problem than storing building telemetry.

    That's the building energy management system (BEMS) data problem, and it's a different problem than "where do we store BMS telemetry."

    A building management system (BMS) operates equipment in real time: setpoints, schedules, alarms. A BEMS is specifically the energy-consumption and demand data layer, something EnergyCAP's own BEMS guide frames as collecting interval data from meters and submeters and turning it into trends, alerts, and savings verification. That data layer feeds both the BMS below it and the analytics layer above it. Related systems, not identical ones.

    This piece assumes general BMS storage is already settled. If BACnet and Modbus protocol handling, the narrow-row schema, and hypertables aren't sorted out yet, start with the building management system database guide first. It also assumes portfolio-level energy benchmarking and anomaly detection are a separate concern, covered in Smart Building Analytics. What's left, and what this piece owns, is submetering's cardinality fan-out, demand monitoring as distinct from consumption rollups, and measurement and verification (M&V) as its own query pattern.

    In short: a BEMS is the energy-specific data-capture layer sitting between BMS equipment telemetry and portfolio analytics. The database underneath it needs to do two things a general BMS schema doesn't: model a sub-meter hierarchy without exploding point count, and support M&V's baseline-and-adjust comparison alongside demand-specific peak queries. A building running one or two utility meters with no submetering program, demand-charge tariff, or M&V requirement doesn't need most of what follows. A single continuous aggregate, per the pillar, covers that case.

    One more thing worth saying plainly: Tiger Data builds a Postgres-based time-series database, so this piece leans toward that answer. The goal here is an honest look at the data problem, not a sales pitch.

    What a building energy management system actually monitors

    Two signals drive everything a BEMS handles, and they're different in kind: consumption and demand.

    Consumption is kWh, a rolled-up total over a period. Demand is kW, an instantaneous rate at a single point in time. A consumption query answers "how much energy did this building use in March." A demand query answers "what was the highest draw this meter recorded in any 15-minute window this month." Those are different questions, and as later sections show, they need different query shapes.

    BEMS data itself usually comes from the same source a BMS already produces: utility-meter feeds and sub-meters, often BACnet- or Modbus-sourced energy points. This piece picks up downstream of that capture step. For the protocol-level detail on how those readings land in a database in the first place, the BMS page covers it.

    From here, a BEMS data layer has three distinct jobs: model a sub-meter hierarchy without the point count becoming unmanageable, support demand-specific queries separate from consumption rollups, and support M&V's baseline-and-adjust computation. Three query problems over related data, each covered below.

    Submetering: modeling the fan-out problem

    One building-level meter becomes many once a portfolio submeters. A floor-level meter multiplies into per-tenant meters. Tenant meters can multiply again into per-circuit meters below that. Submetering isn't "more of the same point type" arriving at a higher rate. It's a hierarchy problem: a floor meter's readings relate to the tenant meters beneath it, and that parent-child relationship needs to be represented in the schema, not just tracked in a spreadsheet somewhere.

    The fix is additive, not a redesign. The BMS pillar's narrow-row schema (time, a point identifier, value) already handles high-cardinality telemetry well. Extend it with a meter hierarchy: give each sub-meter its own identifier alongside a parent-meter reference.

    ALTER TABLE energy_data ADD COLUMN meter_id text, ADD COLUMN parent_meter_id text;

    A floor meter's row carries its own meter_id and a parent_meter_id pointing at the building-level meter. A tenant meter points at its floor. Rolling a tenant's usage up to its floor, or a floor's up to the building, becomes a join or recursive query against that hierarchy, rather than a manual reconciliation exercise.

    There's a real regulatory driver behind why this is showing up now. ASHRAE 90.1-2022 requires metering devices that track electricity usage by load type in commercial buildings over 25,000 square feet in many jurisdictions, specifically at 15-minute intervals. That's not this piece's angle, but it's worth naming as context: interval-metering requirements are pushing more buildings into exactly the submetering fan-out described above.

    The row-count math backs that up. A single building-level meter at hourly resolution produces a modest, easy-to-ignore number of rows per year. The same building with a meter hierarchy at 15-minute intervals, retained across a multi-year window, produces meaningfully more. That's the practical reason the fan-out matters for storage and retention planning, and it matters well before schema design.

    Demand monitoring: peak demand, load curves, and alerting

    Demand needs a different query shape than a consumption rollup, and the reason is financial as much as technical. Many commercial utility tariffs bill a demand charge based on the single highest interval of usage in a billing period. A building that stays well under its average consumption target but spikes once, briefly, to a high draw can still take a real hit on its bill for that one interval. Catching and managing that peak is a distinct, high-value query problem, separate from tracking total consumption.

    That means the query isn't a sum over time_bucket. It's peak-window detection: finding the highest reading within a rolling window, fast enough to matter for alerting rather than only for month-end reporting.

    The following is an illustrative pattern, not a drop-in production query, meant to show the shape of the problem:

    SELECT meter_id, time, kw_reading, max(kw_reading) OVER ( PARTITION BY meter_id ORDER BY time RANGE BETWEEN INTERVAL '1 hour' PRECEDING AND CURRENT ROW ) AS rolling_peak_kw FROM demand_readings WHERE time > now() - INTERVAL '7 days';

    This is a rolling maximum over a bounded time window, grouped by meter. It's a different computation from the standard-deviation-based anomaly-detection pattern that Smart Building Analytics already covers for HVAC fault detection. Both are queries over related telemetry, but a demand-charge question and an equipment-anomaly question ask for different math.

    Demand alerting, flagging a live interval reading as it approaches a known threshold, is a natural extension of this same query shape. It's worth a mention here rather than a section of its own: once a rolling-max query exists, comparing the latest value against a threshold and firing a notification is a small addition.

    Measurement and verification (M&V): proving savings, not just monitoring usage

    Monitoring answers "what's happening now." M&V answers a harder question: "what would have happened without this project." You can never directly meter the energy an efficiency retrofit stopped you from using. That's what a baseline comparison is for.

    M&V, as defined by the International Performance Measurement and Verification Protocol (IPMVP), works by establishing a baseline period, adjusting that baseline for weather and occupancy differences, and then comparing actual post-intervention usage against the adjusted baseline. IPMVP is the industry standard for this practice.

    The distinction from Smart Building Analytics' benchmarking is worth stating plainly, because both look like "compare energy data" on the surface. M&V compares a building against its own adjusted baseline over time, a before-and-after question. Portfolio benchmarking compares buildings against each other, or against a portfolio average, at a point in time, a peer-comparison question. Both are queries over energy data. They need different query shapes.

    At a conceptual level, an M&V query needs three things from the database: the ability to compute a baseline from a defined historical window, the ability to apply an adjustment factor to that baseline, and the ability to compare the adjusted result against a later window. That's a comparison-across-time-ranges problem, closer to a windowed join than a single rollup.

    WITH baseline AS ( SELECT avg(kwh_reading) AS baseline_avg FROM energy_data WHERE time BETWEEN '2025-01-01' AND '2025-06-30' ), adjusted AS ( SELECT baseline_avg * 1.04 AS adjusted_baseline FROM baseline ), post_period AS ( SELECT avg(kwh_reading) AS actual_avg FROM energy_data WHERE time BETWEEN '2026-01-01' AND '2026-06-30' ) SELECT adjusted.adjusted_baseline, post_period.actual_avg, adjusted.adjusted_baseline - post_period.actual_avg AS verified_savings FROM adjusted, post_period;

    That 1.04 adjustment factor is illustrative, standing in for whatever weather- or occupancy-normalization coefficient an M&V program actually calculates. The shape of the query, baseline window, adjustment, comparison window, is the point.

    If there's one section in this piece that most directly answers "how do you store building energy data over time for verification, not just dashboards," this is it.

    Migrating to a BEMS data layer: common starting points

    Most teams arrive at this problem from one of four places.

    From spreadsheets and manual utility-bill tracking. Energy data exists only as monthly totals pulled from a bill. The shift here is to an automated pipeline that captures interval-level meter data as it's generated, instead of a monthly number typed into a spreadsheet.

    From a vendor BEMS dashboard with no queryable database underneath. The interval data exists, but it's locked inside a closed SaaS UI. The path forward is extracting or streaming that same meter data into a database the team controls, so custom M&V and demand queries become possible instead of whatever the vendor's dashboard happens to expose.

    From a BMS that only stores equipment points today. No dedicated energy or meter schema exists yet. Adding the meter hierarchy described earlier is additive to existing BMS storage. It's not a second database and not a rip-and-replace migration.

    From a single hourly continuous aggregate already in place. A team that followed the building management system database guide's basic example, or came from Smart Building Analytics' benchmarking layer, can add a meter-hierarchy dimension and a demand-specific rolling-window query without re-architecting ingestion. The continuous aggregate refresh policy that's already keeping that hourly rollup current keeps working the same way once the underlying table carries a meter hierarchy.

    Each of these is a change from a specific starting point, not a repeat of the schema and query material already covered above.

    Decision framework: do you need a dedicated BEMS data layer?

    Not every building or portfolio needs submetering, demand monitoring, and M&V solved at the same time. Use this to identify which of these problems actually applies right now.

    Extend your BMS schema with a meter hierarchy if:

    You're moving from one utility meter to a handful of sub-meters, by floor, tenant, or circuit, and need to model that hierarchy, but don't yet need demand-charge alerting or savings verification.

    Add demand monitoring if:

    You're on a utility tariff with a demand charge, and peak kW during any interval materially affects your bill. You need peak-window and rolling-max queries, not just consumption sums.

    Build an M&V layer if:

    You're running, or verifying the results of, efficiency retrofits or capital projects and need to prove savings against an adjusted baseline. That's a different query shape than a monitoring rollup.

    Use Smart Building Analytics' benchmarking layer instead if:

    Your primary need is comparing buildings against each other or a portfolio average, or building anomaly-detection and KPI dashboards. That's the analytics layer covered in Smart Building Analytics, not the capture and verification layer covered here.

    A single hourly continuous aggregate is probably still enough if:

    You're managing one or two utility meters with no submetering program, no demand-charge tariff, and no M&V requirement today. Start there. The patterns in this piece are additive when you need them.

    What this looks like in production

    ApexAnalytica, an AI-powered building intelligence platform, states that it targets IPMVP-compliant measurement and verification. The platform runs on an energy_data hypertable and an energy_hourly materialized view, the same underlying substrate referenced from a storage angle in the BMS guide and from an anomaly-detection angle in  Smart Building Analytics. This piece's M&V and demand-monitoring patterns are the kind of query that substrate is built to support.

    The real-world context matters for the submetering framing covered earlier: the platform serves buildings across care and social housing, hospitality, leisure, retail, commercial offices, veterinary, and energy-sector sites, genuine portfolio-scale variety, not a single building's worth of data.

    Use cases to explore further are Soundsensing, which applies interval-data patterns to HVAC predictive maintenance, and Palas, which applies such patterns to air-quality sensor monitoring. 

    Related resources

    For general BMS storage and schema foundation, BACnet and Modbus protocol handling, and the narrow-row schema this piece extends, start with the building management system database guide.

    For portfolio energy benchmarking, anomaly detection, and KPI dashboards built on top of the same underlying data, see Smart Building Analytics.

    For the same interval-data patterns applied at the grid and utility scale rather than the building scale, see Postgres for Energy & Utilities and IoT energy data at scale.

    For the same high-cardinality, interval-data pattern applied to different infrastructure verticals, see Water Utilities Database and Fleet Telemetry Database.

    FAQ

    What's the difference between a BMS and a BEMS?

    A BMS, or BAS, operates building equipment in real time: setpoints, schedules, alarms. A BEMS is specifically the energy-consumption and demand data and reporting layer, often fed by the same points a BMS produces. They're related systems, not identical ones.

    What database should a building energy management system (BEMS) use to store sub-metered energy and demand data over time?

    A time-series-optimized database that can model a sub-meter hierarchy without exploding point count, support both consumption rollups and demand-specific peak queries, and run M&V baseline comparisons, without a separate system for each. What matters specifically: interval-data ingestion rate, hierarchical modeling, and flexible time-range comparisons.

    What is measurement and verification (M&V) in building energy management?

    M&V is a baseline-and-adjust methodology, aligned with IPMVP: establish a baseline, adjust it for weather and occupancy differences, then compare actual post-change usage against that adjusted baseline to prove savings.

    How does submetering work, and why does it multiply my data volume?

    Submetering adds meters below the building-level meter, by floor, tenant, or circuit. That's a hierarchy and cardinality problem. One meter becomes many, not just additional rows of the same point type.

    How much interval data does a building submetering program actually generate?

    Interval readings, commonly at 15-minute resolution per ASHRAE 90.1-2022 requirements for larger commercial buildings, multiplied across a meter hierarchy and retained over months or years, add up quickly. Row-count and retention planning matter well before volume becomes unmanageable.

    Can I run M&V calculations directly against the same database that stores my BMS telemetry?

    Yes. M&V's baseline-and-adjust comparison and demand-monitoring's rolling-window queries can run on the same Postgres or TimescaleDB instance that stores raw BMS telemetry and sub-meter readings, without a second system.

    What's the difference between energy monitoring and M&V?

    Monitoring is a live rollup of what's happening now, a dashboard question. M&V is a baseline-and-adjust comparison proving what would have happened without an intervention, a verification question. Different query shapes over related data.

    Is submetering the same as just adding more sensor points?

    No. It looks similar on the surface, but submetering specifically means modeling a parent-child meter hierarchy, not simply widening a table or adding an arbitrary new point type.

    How does demand monitoring differ from tracking energy consumption?

    Consumption is a rolled-up total over time, measured in kWh. Demand is an instantaneous rate at a point in time, measured in kW. Many utility tariffs bill based on peak demand specifically, which is why it needs its own query pattern, rolling peak detection, rather than a consumption sum.

    Do I need a separate database for energy data, or can it live alongside my BMS and analytics data?

    No. Submetering, demand monitoring, and M&V queries can run against the same Postgres or TimescaleDB instance already storing BMS telemetry and powering the analytics layer, without standing up a separate system.

    What is IPMVP, and why does it matter for M&V?

    IPMVP is the International Performance Measurement and Verification Protocol, the industry-standard framework for M&V methodology. It's referenced by name here so the underlying standard can be checked directly, rather than taken on a vendor's word.

    What's the ROI of a BEMS?

    Energy-savings and payback claims for BEMS implementations vary by source, building type, and program scope, and any specific figure deserves a skeptical read of its source before it's used to justify a project. What's often under-counted: avoided demand charges and verified savings through M&V are separate components of ROI beyond raw consumption reduction, and both are easy to leave out of a back-of-envelope estimate.