Initial commit
Made-with: Cursor
This commit is contained in:
81
db/migration/V002__timescale_hypertables.sql
Normal file
81
db/migration/V002__timescale_hypertables.sql
Normal 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);
|
||||
Reference in New Issue
Block a user