Initial commit

Made-with: Cursor
This commit is contained in:
Dusan Vojacek
2026-03-20 13:27:37 +01:00
commit 8b4af663d8
77 changed files with 13337 additions and 0 deletions

View File

@@ -0,0 +1,81 @@
-- =============================================================
-- V002__timescale_hypertables.sql
-- EMS Platform vytvoření TimescaleDB hypertable pro časové série
-- Spouštět po V001 a po instalaci TimescaleDB extension
-- =============================================================
CREATE EXTENSION IF NOT EXISTS timescaledb;
-- Telemetrie střídače 1min záznamy, partitioning po 1 týdnu
SELECT create_hypertable(
'ems.telemetry_inverter',
'measured_at',
chunk_time_interval => INTERVAL '1 week',
if_not_exists => TRUE
);
-- Telemetrie EV nabíječek
SELECT create_hypertable(
'ems.telemetry_ev_charger',
'measured_at',
chunk_time_interval => INTERVAL '1 week',
if_not_exists => TRUE
);
-- Telemetrie tepelného čerpadla
SELECT create_hypertable(
'ems.telemetry_heat_pump',
'measured_at',
chunk_time_interval => INTERVAL '1 week',
if_not_exists => TRUE
);
-- Spotové ceny 15min záznamy, partitioning po 1 měsíci
SELECT create_hypertable(
'ems.market_interval_price',
'interval_start',
chunk_time_interval => INTERVAL '1 month',
if_not_exists => TRUE
);
-- FVE predikce 15min záznamy
SELECT create_hypertable(
'ems.forecast_pv_interval',
'interval_start',
chunk_time_interval => INTERVAL '1 month',
if_not_exists => TRUE
);
-- Predikce počasí
SELECT create_hypertable(
'ems.forecast_weather_interval',
'interval_start',
chunk_time_interval => INTERVAL '1 month',
if_not_exists => TRUE
);
-- Audit
SELECT create_hypertable(
'ems.audit_interval',
'interval_start',
chunk_time_interval => INTERVAL '1 month',
if_not_exists => TRUE
);
-- Bazální spotřeba
SELECT create_hypertable(
'ems.consumption_baseline_interval',
'interval_start',
chunk_time_interval => INTERVAL '1 month',
if_not_exists => TRUE
);
-- ============================================================
-- Kompresní politiky pro staré chunky
-- Telemetrie starší 30 dní komprimovat (čtení stačí)
-- ============================================================
SELECT add_compression_policy('ems.telemetry_inverter', INTERVAL '30 days', if_not_exists => TRUE);
SELECT add_compression_policy('ems.telemetry_ev_charger', INTERVAL '30 days', if_not_exists => TRUE);
SELECT add_compression_policy('ems.telemetry_heat_pump', INTERVAL '30 days', if_not_exists => TRUE);
SELECT add_compression_policy('ems.market_interval_price', INTERVAL '90 days', if_not_exists => TRUE);