Save time series strategies: add SQL upgrade script

This commit is contained in:
Dmytro Skarzhynets 2025-01-13 12:16:12 +02:00
parent f8cfd158e2
commit 698a0c19ec

View File

@ -209,3 +209,74 @@ $$;
UPDATE resource SET resource_sub_type = 'EXTENSION' WHERE resource_type = 'JS_MODULE' AND resource_sub_type IS NULL;
-- UPDATE RESOURCE JS_MODULE SUB TYPE END
-- UPDATE SAVE TIME SERIES NODES START
DO $$
BEGIN
-- Check if the rule_node table exists
IF EXISTS (
SELECT 1
FROM information_schema.tables
WHERE table_name = 'rule_node'
) THEN
-- CREATE JSON validation function
CREATE OR REPLACE FUNCTION is_valid_jsonb(input text)
RETURNS boolean
LANGUAGE plpgsql
AS $func$
DECLARE
dummy JSONB;
BEGIN
dummy := input::jsonb;
RETURN true;
EXCEPTION
WHEN others THEN
RETURN false;
END;
$func$;
UPDATE rule_node
SET configuration = CASE
-- Case 1: If configuration is NULL, invalid JSON, or not a JSON object - set default configuration
WHEN configuration IS NULL
OR NOT is_valid_jsonb(configuration)
OR jsonb_typeof(configuration::jsonb) <> 'object'
THEN jsonb_build_object(
'defaultTTL', 0,
'useServerTs', false,
'persistenceSettings', jsonb_build_object('type', 'ON_EVERY_MESSAGE')
)
-- Case 2: If a valid JSON object with persistenceSettings (rule node was already upgraded) - leave unchanged
WHEN configuration::jsonb ? 'persistenceSettings'
THEN configuration::jsonb
-- Case 3: If a valid JSON object without persistenceSettings and skipLatestPersistence = 'true' (string 'true' or boolean true) - set latest to SKIP
WHEN configuration::jsonb ->> 'skipLatestPersistence' = 'true'
THEN (configuration::jsonb - 'skipLatestPersistence')
|| jsonb_build_object(
'persistenceSettings', jsonb_build_object(
'type', 'ADVANCED',
'timeseries', jsonb_build_object('type', 'ON_EVERY_MESSAGE'),
'latest', jsonb_build_object('type', 'SKIP'),
'webSockets', jsonb_build_object('type', 'ON_EVERY_MESSAGE')
)
)
-- Case 4: If a valid JSON object without persistenceSettings and skipLatestPersistence not 'true' (everything else) - set all to ON_EVERY_MESSAGE
ELSE (configuration::jsonb - 'skipLatestPersistence')
|| jsonb_build_object(
'persistenceSettings', jsonb_build_object(
'type', 'ON_EVERY_MESSAGE'
)
)
END::text
WHERE type = 'org.thingsboard.rule.engine.telemetry.TbMsgTimeseriesNode';
-- Drop the helper function
DROP FUNCTION is_valid_jsonb(text);
END IF;
END;
$$;
-- UPDATE SAVE TIME SERIES NODES END