opravy chybejicich contraints
This commit is contained in:
27
db/migration/V032__market_interval_price_primary_key.sql
Normal file
27
db/migration/V032__market_interval_price_primary_key.sql
Normal file
@@ -0,0 +1,27 @@
|
||||
-- OTE import (fn_ote_import_from_json) používá ON CONFLICT (market_source, interval_start).
|
||||
-- Bez odpovídajícího UNIQUE/PK PostgreSQL hlásí:
|
||||
-- "there is no unique or exclusion constraint matching the ON CONFLICT specification"
|
||||
-- Některé instalace (ruční DB, nestandardní pořadí migrací, restore) mohly zůstat bez PK.
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM pg_catalog.pg_class r
|
||||
JOIN pg_catalog.pg_namespace n ON n.oid = r.relnamespace
|
||||
WHERE n.nspname = 'ems'
|
||||
AND r.relname = 'market_interval_price'
|
||||
AND r.relkind = 'r'
|
||||
) AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM pg_catalog.pg_constraint c
|
||||
JOIN pg_catalog.pg_class r ON r.oid = c.conrelid
|
||||
JOIN pg_catalog.pg_namespace n ON n.oid = r.relnamespace
|
||||
WHERE n.nspname = 'ems'
|
||||
AND r.relname = 'market_interval_price'
|
||||
AND c.contype = 'p'
|
||||
) THEN
|
||||
ALTER TABLE ems.market_interval_price
|
||||
ADD CONSTRAINT market_interval_price_pkey PRIMARY KEY (market_source, interval_start);
|
||||
END IF;
|
||||
END $$;
|
||||
58
db/migration/V033__telemetry_hypertable_primary_keys.sql
Normal file
58
db/migration/V033__telemetry_hypertable_primary_keys.sql
Normal file
@@ -0,0 +1,58 @@
|
||||
-- telemetry_collector: INSERT … ON CONFLICT vyžaduje UNIQUE/PK odpovídající cíli konfliktu.
|
||||
-- Stejná třída problému jako u market_interval_price (V032): DB bez primárních klíčů z V001.
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM pg_catalog.pg_class r
|
||||
JOIN pg_catalog.pg_namespace n ON n.oid = r.relnamespace
|
||||
WHERE n.nspname = 'ems' AND r.relname = 'telemetry_inverter' AND r.relkind = 'r'
|
||||
) AND NOT EXISTS (
|
||||
SELECT 1 FROM pg_catalog.pg_constraint c
|
||||
JOIN pg_catalog.pg_class r ON r.oid = c.conrelid
|
||||
JOIN pg_catalog.pg_namespace n ON n.oid = r.relnamespace
|
||||
WHERE n.nspname = 'ems' AND r.relname = 'telemetry_inverter' AND c.contype = 'p'
|
||||
) THEN
|
||||
ALTER TABLE ems.telemetry_inverter
|
||||
ADD CONSTRAINT telemetry_inverter_pkey PRIMARY KEY (inverter_id, measured_at);
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM pg_catalog.pg_class r
|
||||
JOIN pg_catalog.pg_namespace n ON n.oid = r.relnamespace
|
||||
WHERE n.nspname = 'ems' AND r.relname = 'telemetry_ev_charger' AND r.relkind = 'r'
|
||||
) AND NOT EXISTS (
|
||||
SELECT 1 FROM pg_catalog.pg_constraint c
|
||||
JOIN pg_catalog.pg_class r ON r.oid = c.conrelid
|
||||
JOIN pg_catalog.pg_namespace n ON n.oid = r.relnamespace
|
||||
WHERE n.nspname = 'ems' AND r.relname = 'telemetry_ev_charger' AND c.contype = 'p'
|
||||
) THEN
|
||||
ALTER TABLE ems.telemetry_ev_charger
|
||||
ADD CONSTRAINT telemetry_ev_charger_pkey PRIMARY KEY (charger_id, connector_id, measured_at);
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM pg_catalog.pg_class r
|
||||
JOIN pg_catalog.pg_namespace n ON n.oid = r.relnamespace
|
||||
WHERE n.nspname = 'ems' AND r.relname = 'telemetry_heat_pump' AND r.relkind = 'r'
|
||||
) AND NOT EXISTS (
|
||||
SELECT 1 FROM pg_catalog.pg_constraint c
|
||||
JOIN pg_catalog.pg_class r ON r.oid = c.conrelid
|
||||
JOIN pg_catalog.pg_namespace n ON n.oid = r.relnamespace
|
||||
WHERE n.nspname = 'ems' AND r.relname = 'telemetry_heat_pump' AND c.contype = 'p'
|
||||
) THEN
|
||||
ALTER TABLE ems.telemetry_heat_pump
|
||||
ADD CONSTRAINT telemetry_heat_pump_pkey PRIMARY KEY (heat_pump_id, measured_at);
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
-- Jeden otevřený řádek session na nabíječku (V020); bez indexu spadne ON CONFLICT v telemetry_collector.
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS uidx_ev_session_charger_open
|
||||
ON ems.ev_session (charger_id)
|
||||
WHERE session_end IS NULL;
|
||||
Reference in New Issue
Block a user