From 562bbbe849ac80d62f48bcc229d869b55b2d220c Mon Sep 17 00:00:00 2001 From: Igor Kulikov Date: Tue, 7 Jul 2020 18:02:29 +0300 Subject: [PATCH] Fix upgrade scripts. --- .../upgrade/3.0.1/schema_update_to_uuid.sql | 28 +++++++++++++++++++ .../install/ThingsboardInstallService.java | 5 ++-- .../install/SqlDatabaseUpgradeService.java | 12 ++++---- .../main/resources/sql/schema-entities.sql | 28 +++++++++++++++++++ 4 files changed, 64 insertions(+), 9 deletions(-) diff --git a/application/src/main/data/upgrade/3.0.1/schema_update_to_uuid.sql b/application/src/main/data/upgrade/3.0.1/schema_update_to_uuid.sql index f3b1b3f751..18225f2134 100644 --- a/application/src/main/data/upgrade/3.0.1/schema_update_to_uuid.sql +++ b/application/src/main/data/upgrade/3.0.1/schema_update_to_uuid.sql @@ -14,6 +14,14 @@ -- limitations under the License. -- +CREATE OR REPLACE FUNCTION to_uuid(IN entity_id varchar, OUT uuid_id uuid) AS +$$ +BEGIN + uuid_id := substring(entity_id, 8, 8) || '-' || substring(entity_id, 4, 4) || '-1' || substring(entity_id, 1, 3) || + '-' || substring(entity_id, 16, 4) || '-' || substring(entity_id, 20, 12); +END; +$$ LANGUAGE plpgsql; + CREATE OR REPLACE FUNCTION extract_ts(uuid UUID) RETURNS BIGINT AS $$ DECLARE @@ -826,3 +834,23 @@ BEGIN END IF; END; $$; + +CREATE TABLE IF NOT EXISTS ts_kv_latest +( + entity_id uuid NOT NULL, + key int NOT NULL, + ts bigint NOT NULL, + bool_v boolean, + str_v varchar(10000000), + long_v bigint, + dbl_v double precision, + json_v json, + CONSTRAINT ts_kv_latest_pkey PRIMARY KEY (entity_id, key) +); + +CREATE TABLE IF NOT EXISTS ts_kv_dictionary +( + key varchar(255) NOT NULL, + key_id serial UNIQUE, + CONSTRAINT ts_key_id_pkey PRIMARY KEY (key) +); diff --git a/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java b/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java index 79c6a66685..1cc4146ed7 100644 --- a/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java +++ b/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java @@ -156,12 +156,11 @@ public class ThingsboardInstallService { } case "2.5.1": log.info("Upgrading ThingsBoard from version 2.5.1 to 3.0.0 ..."); - log.info("Updating system data..."); - systemDataLoaderService.updateSystemWidgets(); - break; case "3.0.1": log.info("Upgrading ThingsBoard from version 3.0.1 to 3.1.0 ..."); databaseEntitiesUpgradeService.upgradeDatabase("3.0.1"); + log.info("Updating system data..."); + systemDataLoaderService.updateSystemWidgets(); break; default: throw new RuntimeException("Unable to upgrade ThingsBoard, unsupported fromVersion: " + upgradeFromVersion); diff --git a/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseUpgradeService.java b/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseUpgradeService.java index 9536b20fcf..729a38fb14 100644 --- a/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseUpgradeService.java +++ b/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseUpgradeService.java @@ -254,13 +254,9 @@ public class SqlDatabaseUpgradeService implements DatabaseEntitiesUpgradeService conn.createStatement().execute("call drop_all_idx()"); - log.info("Updating alarm relations..."); + log.info("Optimizing alarm relations..."); conn.createStatement().execute("DELETE from relation WHERE relation_type_group = 'ALARM' AND relation_type <> 'ALARM_ANY';"); - - conn.createStatement().execute("UPDATE relation SET relation_type = 'ANY' WHERE relation_type_group = 'ALARM' AND relation_type = 'ALARM_ANY';"); - log.info("Alarm relations updated."); - - conn.createStatement().execute("VACUUM FULL relation"); + log.info("Alarm relations optimized."); for (String table : tables) { log.info("Updating table {}.", table); @@ -286,6 +282,10 @@ public class SqlDatabaseUpgradeService implements DatabaseEntitiesUpgradeService conn.createStatement().execute("DROP PROCEDURE create_all_idx"); conn.createStatement().execute("DROP FUNCTION column_type_to_uuid"); + log.info("Updating alarm relations..."); + conn.createStatement().execute("UPDATE relation SET relation_type = 'ANY' WHERE relation_type_group = 'ALARM' AND relation_type = 'ALARM_ANY';"); + log.info("Alarm relations updated."); + conn.createStatement().execute("UPDATE tb_schema_settings SET schema_version = 3001000;"); conn.createStatement().execute("VACUUM FULL"); diff --git a/dao/src/main/resources/sql/schema-entities.sql b/dao/src/main/resources/sql/schema-entities.sql index 6a995365ef..97aa2b1dae 100644 --- a/dao/src/main/resources/sql/schema-entities.sql +++ b/dao/src/main/resources/sql/schema-entities.sql @@ -277,6 +277,26 @@ CREATE TABLE IF NOT EXISTS entity_view ( additional_info varchar ); +CREATE TABLE IF NOT EXISTS ts_kv_latest +( + entity_id uuid NOT NULL, + key int NOT NULL, + ts bigint NOT NULL, + bool_v boolean, + str_v varchar(10000000), + long_v bigint, + dbl_v double precision, + json_v json, + CONSTRAINT ts_kv_latest_pkey PRIMARY KEY (entity_id, key) +); + +CREATE TABLE IF NOT EXISTS ts_kv_dictionary +( + key varchar(255) NOT NULL, + key_id serial UNIQUE, + CONSTRAINT ts_key_id_pkey PRIMARY KEY (key) +); + CREATE OR REPLACE PROCEDURE cleanup_events_by_ttl(IN ttl bigint, IN debug_ttl bigint, INOUT deleted bigint) LANGUAGE plpgsql AS $$ @@ -301,3 +321,11 @@ BEGIN deleted := ttl_deleted_count + debug_ttl_deleted_count; END $$; + +CREATE OR REPLACE FUNCTION to_uuid(IN entity_id varchar, OUT uuid_id uuid) AS +$$ +BEGIN + uuid_id := substring(entity_id, 8, 8) || '-' || substring(entity_id, 4, 4) || '-1' || substring(entity_id, 1, 3) || + '-' || substring(entity_id, 16, 4) || '-' || substring(entity_id, 20, 12); +END; +$$ LANGUAGE plpgsql;