Update migration 202412:

- Update public.logbook_update_metrics_short_fn, handle corner use case
- Update public.logbook_update_metrics_fn, handle corner use case
- Update public.logbook_update_metrics_timebucket_fn, handle corner use case
This commit is contained in:
xbgmsharp
2025-01-16 08:59:50 +01:00
parent 5409f1eec9
commit 9e9189ac36

View File

@@ -267,7 +267,16 @@ BEGIN
COALESCE((m.metrics->'environment.outside.relativeHumidity')::NUMERIC, NULL) as outsidehumidity, COALESCE((m.metrics->'environment.outside.relativeHumidity')::NUMERIC, NULL) as outsidehumidity,
COALESCE((m.metrics->'environment.outside.pressure')::NUMERIC, NULL) as outsidepressure, COALESCE((m.metrics->'environment.outside.pressure')::NUMERIC, NULL) as outsidepressure,
COALESCE((m.metrics->'environment.outside.temperature')::NUMERIC, NULL) as outsidetemperature, COALESCE((m.metrics->'environment.outside.temperature')::NUMERIC, NULL) as outsidetemperature,
COALESCE((m.metrics->'electrical.batteries.House.capacity.stateOfCharge')::NUMERIC, NULL) as stateofcharge, COALESCE(
NULLIF(
CASE
WHEN (m.metrics->>'electrical.batteries.House.capacity.stateOfCharge') ~ '^-?[0-9]+(\.[0-9]+)?$' THEN
(m.metrics->>'electrical.batteries.House.capacity.stateOfCharge')::NUMERIC
END,
NULL
),
NULL
) as stateofcharge,
COALESCE((m.metrics->'electrical.batteries.House.voltage')::NUMERIC, NULL) as voltage, COALESCE((m.metrics->'electrical.batteries.House.voltage')::NUMERIC, NULL) as voltage,
ST_MakePoint(m.longitude, m.latitude) AS geo_point ST_MakePoint(m.longitude, m.latitude) AS geo_point
FROM api.metrics m FROM api.metrics m
@@ -362,7 +371,16 @@ BEGIN
COALESCE((t.metrics->'environment.outside.relativeHumidity')::NUMERIC, NULL) as outsidehumidity, COALESCE((t.metrics->'environment.outside.relativeHumidity')::NUMERIC, NULL) as outsidehumidity,
COALESCE((t.metrics->'environment.outside.pressure')::NUMERIC, NULL) as outsidepressure, COALESCE((t.metrics->'environment.outside.pressure')::NUMERIC, NULL) as outsidepressure,
COALESCE((t.metrics->'environment.outside.temperature')::NUMERIC, NULL) as outsidetemperature, COALESCE((t.metrics->'environment.outside.temperature')::NUMERIC, NULL) as outsidetemperature,
COALESCE((t.metrics->'electrical.batteries.House.capacity.stateOfCharge')::NUMERIC, NULL) as stateofcharge, COALESCE(
NULLIF(
CASE
WHEN (t.metrics->>'electrical.batteries.House.capacity.stateOfCharge') ~ '^-?[0-9]+(\.[0-9]+)?$' THEN
(t.metrics->>'electrical.batteries.House.capacity.stateOfCharge')::NUMERIC
END,
NULL
),
NULL
) as stateofcharge,
COALESCE((t.metrics->'electrical.batteries.House.voltage')::NUMERIC, NULL) as voltage, COALESCE((t.metrics->'electrical.batteries.House.voltage')::NUMERIC, NULL) as voltage,
ST_MakePoint(t.longitude, t.latitude) AS geo_point ST_MakePoint(t.longitude, t.latitude) AS geo_point
FROM ( FROM (
@@ -395,7 +413,16 @@ BEGIN
COALESCE((m.metrics->'environment.outside.relativeHumidity')::NUMERIC, NULL) as outsidehumidity, COALESCE((m.metrics->'environment.outside.relativeHumidity')::NUMERIC, NULL) as outsidehumidity,
COALESCE((m.metrics->'environment.outside.pressure')::NUMERIC, NULL) as outsidepressure, COALESCE((m.metrics->'environment.outside.pressure')::NUMERIC, NULL) as outsidepressure,
COALESCE((m.metrics->'environment.outside.temperature')::NUMERIC, NULL) as outsidetemperature, COALESCE((m.metrics->'environment.outside.temperature')::NUMERIC, NULL) as outsidetemperature,
COALESCE((m.metrics->'electrical.batteries.House.capacity.stateOfCharge')::NUMERIC, NULL) as stateofcharge, COALESCE(
NULLIF(
CASE
WHEN (m.metrics->>'electrical.batteries.House.capacity.stateOfCharge') ~ '^-?[0-9]+(\.[0-9]+)?$' THEN
(m.metrics->>'electrical.batteries.House.capacity.stateOfCharge')::NUMERIC
END,
NULL
),
NULL
) as stateofcharge,
COALESCE((m.metrics->'electrical.batteries.House.voltage')::NUMERIC, NULL) as voltage, COALESCE((m.metrics->'electrical.batteries.House.voltage')::NUMERIC, NULL) as voltage,
ST_MakePoint(m.longitude, m.latitude) AS geo_point ST_MakePoint(m.longitude, m.latitude) AS geo_point
FROM api.metrics m FROM api.metrics m
@@ -424,7 +451,16 @@ BEGIN
COALESCE((m.metrics->'environment.outside.relativeHumidity')::NUMERIC, NULL) as outsidehumidity, COALESCE((m.metrics->'environment.outside.relativeHumidity')::NUMERIC, NULL) as outsidehumidity,
COALESCE((m.metrics->'environment.outside.pressure')::NUMERIC, NULL) as outsidepressure, COALESCE((m.metrics->'environment.outside.pressure')::NUMERIC, NULL) as outsidepressure,
COALESCE((m.metrics->'environment.outside.temperature')::NUMERIC, NULL) as outsidetemperature, COALESCE((m.metrics->'environment.outside.temperature')::NUMERIC, NULL) as outsidetemperature,
COALESCE((m.metrics->'electrical.batteries.House.capacity.stateOfCharge')::NUMERIC, NULL) as stateofcharge, COALESCE(
NULLIF(
CASE
WHEN (m.metrics->>'electrical.batteries.House.capacity.stateOfCharge') ~ '^-?[0-9]+(\.[0-9]+)?$' THEN
(m.metrics->>'electrical.batteries.House.capacity.stateOfCharge')::NUMERIC
END,
NULL
),
NULL
) as stateofcharge,
COALESCE((m.metrics->'electrical.batteries.House.voltage')::NUMERIC, NULL) as voltage, COALESCE((m.metrics->'electrical.batteries.House.voltage')::NUMERIC, NULL) as voltage,
ST_MakePoint(m.longitude, m.latitude) AS geo_point ST_MakePoint(m.longitude, m.latitude) AS geo_point
FROM api.metrics m FROM api.metrics m
@@ -513,7 +549,7 @@ BEGIN
RETURN QUERY RETURN QUERY
WITH metrics AS ( WITH metrics AS (
-- Extract metrics base the total of entry ignoring first and last 10 minutes metrics -- Extract metrics base the total of entry ignoring first and last 10 minutes metrics
SELECT time_bucket(bucket_interval::INTERVAL, m.time) AS time_bucket, -- Time-bucketed period SELECT time_bucket(bucket_interval::INTERVAL, m.time) AS time_bucket, -- Time-bucketed period
avg(m.courseovergroundtrue) as courseovergroundtrue, avg(m.courseovergroundtrue) as courseovergroundtrue,
avg(m.speedoverground) as speedoverground, avg(m.speedoverground) as speedoverground,
avg(m.windspeedapparent) as windspeedapparent, avg(m.windspeedapparent) as windspeedapparent,
@@ -527,7 +563,16 @@ BEGIN
COALESCE(avg((m.metrics->'environment.outside.relativeHumidity')::NUMERIC), NULL) as outsidehumidity, COALESCE(avg((m.metrics->'environment.outside.relativeHumidity')::NUMERIC), NULL) as outsidehumidity,
COALESCE(avg((m.metrics->'environment.outside.pressure')::NUMERIC), NULL) as outsidepressure, COALESCE(avg((m.metrics->'environment.outside.pressure')::NUMERIC), NULL) as outsidepressure,
COALESCE(avg((m.metrics->'environment.outside.temperature')::NUMERIC), NULL) as outsidetemperature, COALESCE(avg((m.metrics->'environment.outside.temperature')::NUMERIC), NULL) as outsidetemperature,
COALESCE(avg((m.metrics->'electrical.batteries.House.capacity.stateOfCharge')::NUMERIC), NULL) as stateofcharge, COALESCE(
NULLIF(
CASE
WHEN (m.metrics->>'electrical.batteries.House.capacity.stateOfCharge') ~ '^-?[0-9]+(\.[0-9]+)?$' THEN
(m.metrics->>'electrical.batteries.House.capacity.stateOfCharge')::NUMERIC
END,
NULL
),
NULL
) as stateofcharge,
COALESCE(avg((m.metrics->'electrical.batteries.House.voltage')::NUMERIC), NULL) as voltage, COALESCE(avg((m.metrics->'electrical.batteries.House.voltage')::NUMERIC), NULL) as voltage,
ST_MakePoint(last(m.longitude, m.time),last(m.latitude, m.time)) AS geo_point ST_MakePoint(last(m.longitude, m.time),last(m.latitude, m.time)) AS geo_point
FROM api.metrics m FROM api.metrics m
@@ -552,13 +597,22 @@ BEGIN
m.status, m.status,
COALESCE(metersToKnots((m.metrics->'environment.wind.speedTrue')::NUMERIC), NULL) AS truewindspeed, COALESCE(metersToKnots((m.metrics->'environment.wind.speedTrue')::NUMERIC), NULL) AS truewindspeed,
COALESCE(radiantToDegrees((m.metrics->'environment.wind.directionTrue')::NUMERIC), NULL) AS truewinddirection, COALESCE(radiantToDegrees((m.metrics->'environment.wind.directionTrue')::NUMERIC), NULL) AS truewinddirection,
COALESCE(avg((m.metrics->'environment.water.temperature')::NUMERIC), NULL) as watertemperature, COALESCE((m.metrics->'environment.water.temperature')::NUMERIC, NULL) as watertemperature,
COALESCE(avg((m.metrics->'environment.depth.belowTransducer')::NUMERIC), NULL) as depth, COALESCE((m.metrics->'environment.depth.belowTransducer')::NUMERIC, NULL) as depth,
COALESCE(avg((m.metrics->'environment.outside.relativeHumidity')::NUMERIC), NULL) as outsidehumidity, COALESCE((m.metrics->'environment.outside.relativeHumidity')::NUMERIC, NULL) as outsidehumidity,
COALESCE(avg((m.metrics->'environment.outside.pressure')::NUMERIC), NULL) as outsidepressure, COALESCE((m.metrics->'environment.outside.pressure')::NUMERIC, NULL) as outsidepressure,
COALESCE(avg((m.metrics->'environment.outside.temperature')::NUMERIC), NULL) as outsidetemperature, COALESCE((m.metrics->'environment.outside.temperature')::NUMERIC, NULL) as outsidetemperature,
COALESCE(avg((m.metrics->'electrical.batteries.House.capacity.stateOfCharge')::NUMERIC), NULL) as stateofcharge, COALESCE(
COALESCE(avg((m.metrics->'electrical.batteries.House.voltage')::NUMERIC), NULL) as voltage, NULLIF(
CASE
WHEN (m.metrics->>'electrical.batteries.House.capacity.stateOfCharge') ~ '^-?[0-9]+(\.[0-9]+)?$' THEN
(m.metrics->>'electrical.batteries.House.capacity.stateOfCharge')::NUMERIC
END,
NULL
),
NULL
) as stateofcharge,
COALESCE((m.metrics->'electrical.batteries.House.voltage')::NUMERIC, NULL) as voltage,
ST_MakePoint(m.longitude, m.latitude) AS geo_point ST_MakePoint(m.longitude, m.latitude) AS geo_point
FROM api.metrics m FROM api.metrics m
WHERE m.latitude IS NOT NULL WHERE m.latitude IS NOT NULL
@@ -581,13 +635,22 @@ BEGIN
m.status, m.status,
COALESCE(metersToKnots((m.metrics->'environment.wind.speedTrue')::NUMERIC), NULL) AS truewindspeed, COALESCE(metersToKnots((m.metrics->'environment.wind.speedTrue')::NUMERIC), NULL) AS truewindspeed,
COALESCE(radiantToDegrees((m.metrics->'environment.wind.directionTrue')::NUMERIC), NULL) AS truewinddirection, COALESCE(radiantToDegrees((m.metrics->'environment.wind.directionTrue')::NUMERIC), NULL) AS truewinddirection,
COALESCE(avg((m.metrics->'environment.water.temperature')::NUMERIC), NULL) as watertemperature, COALESCE((m.metrics->'environment.water.temperature')::NUMERIC, NULL) as watertemperature,
COALESCE(avg((m.metrics->'environment.depth.belowTransducer')::NUMERIC), NULL) as depth, COALESCE((m.metrics->'environment.depth.belowTransducer')::NUMERIC, NULL) as depth,
COALESCE(avg((m.metrics->'environment.outside.relativeHumidity')::NUMERIC), NULL) as outsidehumidity, COALESCE((m.metrics->'environment.outside.relativeHumidity')::NUMERIC, NULL) as outsidehumidity,
COALESCE(avg((m.metrics->'environment.outside.pressure')::NUMERIC), NULL) as outsidepressure, COALESCE((m.metrics->'environment.outside.pressure')::NUMERIC, NULL) as outsidepressure,
COALESCE(avg((m.metrics->'environment.outside.temperature')::NUMERIC), NULL) as outsidetemperature, COALESCE((m.metrics->'environment.outside.temperature')::NUMERIC, NULL) as outsidetemperature,
COALESCE(avg((m.metrics->'electrical.batteries.House.capacity.stateOfCharge')::NUMERIC), NULL) as stateofcharge, COALESCE(
COALESCE(avg((m.metrics->'electrical.batteries.House.voltage')::NUMERIC), NULL) as voltage, NULLIF(
CASE
WHEN (m.metrics->>'electrical.batteries.House.capacity.stateOfCharge') ~ '^-?[0-9]+(\.[0-9]+)?$' THEN
(m.metrics->>'electrical.batteries.House.capacity.stateOfCharge')::NUMERIC
END,
NULL
),
NULL
) as stateofcharge,
COALESCE((m.metrics->'electrical.batteries.House.voltage')::NUMERIC, NULL) as voltage,
ST_MakePoint(m.longitude, m.latitude) AS geo_point ST_MakePoint(m.longitude, m.latitude) AS geo_point
FROM api.metrics m FROM api.metrics m
WHERE m.latitude IS NOT NULL WHERE m.latitude IS NOT NULL
@@ -747,6 +810,9 @@ CREATE OR REPLACE FUNCTION api.merge_logbook_fn(IN id_start integer, IN id_end i
trip_temp_out = t_rec.outsidetemperature, trip_temp_out = t_rec.outsidetemperature,
trip_pres_out = t_rec.outsidepressure, trip_pres_out = t_rec.outsidepressure,
trip_hum_out = t_rec.outsidehumidity trip_hum_out = t_rec.outsidehumidity
--embedding = NULL,
--spatial_embedding = NULL,
--image_embedding = NULL
WHERE id = logbook_rec_start.id; WHERE id = logbook_rec_start.id;
/*** Deprecated removed column /*** Deprecated removed column
@@ -2170,6 +2236,7 @@ AS SELECT id,
_to_moorage_id AS to_moorage_id _to_moorage_id AS to_moorage_id
FROM api.logbook l FROM api.logbook l
WHERE _to_time IS NOT NULL WHERE _to_time IS NOT NULL
AND trip IS NOT NULL
ORDER BY _from_time DESC; ORDER BY _from_time DESC;
-- Description -- Description
COMMENT ON VIEW api.log_view IS 'Log web view'; COMMENT ON VIEW api.log_view IS 'Log web view';
@@ -2201,6 +2268,7 @@ BEGIN
WHERE id = _id; WHERE id = _id;
END; END;
$$ LANGUAGE plpgsql; $$ LANGUAGE plpgsql;
-- Description
COMMENT ON FUNCTION api.delete_trip_entry_fn IS 'Delete at a specific time a temporal sequence for all trip_* column from a logbook'; COMMENT ON FUNCTION api.delete_trip_entry_fn IS 'Delete at a specific time a temporal sequence for all trip_* column from a logbook';
-- Update export_logbooks_geojson_point_trips_fn, replace timelapse2_fn, Generate the GeoJSON from the time sequence value -- Update export_logbooks_geojson_point_trips_fn, replace timelapse2_fn, Generate the GeoJSON from the time sequence value
@@ -2239,6 +2307,7 @@ BEGIN
LATERAL jsonb_array_elements(l.log_geojson) AS feature_element; -- Flatten the arrays and create a GeoJSON FeatureCollection LATERAL jsonb_array_elements(l.log_geojson) AS feature_element; -- Flatten the arrays and create a GeoJSON FeatureCollection
END; END;
$function$; $function$;
-- Description
COMMENT ON FUNCTION api.export_logbooks_geojson_point_trips_fn IS 'Export all selected logs into a geojson `trip` to a geojson as points including properties'; COMMENT ON FUNCTION api.export_logbooks_geojson_point_trips_fn IS 'Export all selected logs into a geojson `trip` to a geojson as points including properties';
-- Update api role SQL connection to 40 -- Update api role SQL connection to 40