thingsboard/dao/src/main/resources/sql/schema-entities.sql

383 lines
12 KiB
MySQL
Raw Normal View History

--
2020-01-06 16:52:41 +02:00
-- Copyright © 2016-2020 The Thingsboard Authors
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
2017-06-01 16:50:37 +03:00
CREATE TABLE IF NOT EXISTS tb_schema_settings
(
schema_version bigint NOT NULL,
CONSTRAINT tb_schema_settings_pkey PRIMARY KEY (schema_version)
);
CREATE OR REPLACE PROCEDURE insert_tb_schema_settings()
LANGUAGE plpgsql AS
$$
BEGIN
IF (SELECT COUNT(*) FROM tb_schema_settings) = 0 THEN
INSERT INTO tb_schema_settings (schema_version) VALUES (3002000);
END IF;
END;
$$;
call insert_tb_schema_settings();
CREATE TABLE IF NOT EXISTS admin_settings (
2020-06-22 11:10:28 +03:00
id uuid NOT NULL CONSTRAINT admin_settings_pkey PRIMARY KEY,
created_time bigint NOT NULL,
2017-07-01 20:39:00 +03:00
json_value varchar,
2017-07-17 17:32:32 +03:00
key varchar(255)
);
CREATE TABLE IF NOT EXISTS alarm (
2020-06-22 11:10:28 +03:00
id uuid NOT NULL CONSTRAINT alarm_pkey PRIMARY KEY,
created_time bigint NOT NULL,
ack_ts bigint,
clear_ts bigint,
2017-07-01 20:39:00 +03:00
additional_info varchar,
end_ts bigint,
2020-06-22 11:10:28 +03:00
originator_id uuid,
originator_type integer,
propagate boolean,
2017-07-17 17:32:32 +03:00
severity varchar(255),
start_ts bigint,
2017-07-17 17:32:32 +03:00
status varchar(255),
2020-06-22 11:10:28 +03:00
tenant_id uuid,
2019-12-08 23:52:29 +02:00
propagate_relation_types varchar,
2017-07-17 17:32:32 +03:00
type varchar(255)
);
CREATE TABLE IF NOT EXISTS asset (
2020-06-22 11:10:28 +03:00
id uuid NOT NULL CONSTRAINT asset_pkey PRIMARY KEY,
created_time bigint NOT NULL,
2017-07-01 20:39:00 +03:00
additional_info varchar,
2020-06-22 11:10:28 +03:00
customer_id uuid,
2017-07-17 17:32:32 +03:00
name varchar(255),
label varchar(255),
2017-07-17 17:32:32 +03:00
search_text varchar(255),
2020-06-22 11:10:28 +03:00
tenant_id uuid,
type varchar(255),
CONSTRAINT asset_name_unq_key UNIQUE (tenant_id, name)
);
2018-02-09 17:17:44 +02:00
CREATE TABLE IF NOT EXISTS audit_log (
2020-06-22 11:10:28 +03:00
id uuid NOT NULL CONSTRAINT audit_log_pkey PRIMARY KEY,
created_time bigint NOT NULL,
tenant_id uuid,
customer_id uuid,
entity_id uuid,
2018-02-09 17:17:44 +02:00
entity_type varchar(255),
entity_name varchar(255),
2020-06-22 11:10:28 +03:00
user_id uuid,
2018-02-09 17:17:44 +02:00
user_name varchar(255),
action_type varchar(255),
2018-02-21 20:05:03 +02:00
action_data varchar(1000000),
2018-02-09 17:17:44 +02:00
action_status varchar(255),
2018-02-21 20:05:03 +02:00
action_failure_details varchar(1000000)
2018-02-09 17:17:44 +02:00
);
2017-06-13 16:29:40 +03:00
CREATE TABLE IF NOT EXISTS attribute_kv (
2017-07-17 17:32:32 +03:00
entity_type varchar(255),
2020-06-22 11:10:28 +03:00
entity_id uuid,
2017-07-17 17:32:32 +03:00
attribute_type varchar(255),
attribute_key varchar(255),
2017-06-09 19:52:26 +03:00
bool_v boolean,
2017-08-17 16:38:13 +03:00
str_v varchar(10000000),
2017-06-09 19:52:26 +03:00
long_v bigint,
dbl_v double precision,
json_v json,
2017-06-09 19:52:26 +03:00
last_update_ts bigint,
2018-12-20 14:53:16 +01:00
CONSTRAINT attribute_kv_pkey PRIMARY KEY (entity_type, entity_id, attribute_type, attribute_key)
2017-06-09 19:52:26 +03:00
);
CREATE TABLE IF NOT EXISTS component_descriptor (
2020-06-22 11:10:28 +03:00
id uuid NOT NULL CONSTRAINT component_descriptor_pkey PRIMARY KEY,
created_time bigint NOT NULL,
2017-07-17 17:32:32 +03:00
actions varchar(255),
2018-10-30 13:32:55 +02:00
clazz varchar UNIQUE,
2017-07-01 20:39:00 +03:00
configuration_descriptor varchar,
2017-07-17 17:32:32 +03:00
name varchar(255),
scope varchar(255),
search_text varchar(255),
type varchar(255)
);
CREATE TABLE IF NOT EXISTS customer (
2020-06-22 11:10:28 +03:00
id uuid NOT NULL CONSTRAINT customer_pkey PRIMARY KEY,
created_time bigint NOT NULL,
2017-07-01 20:39:00 +03:00
additional_info varchar,
2017-07-17 17:32:32 +03:00
address varchar,
address2 varchar,
city varchar(255),
country varchar(255),
email varchar(255),
phone varchar(255),
search_text varchar(255),
state varchar(255),
2020-06-22 11:10:28 +03:00
tenant_id uuid,
2017-07-17 17:32:32 +03:00
title varchar(255),
zip varchar(255)
);
CREATE TABLE IF NOT EXISTS dashboard (
2020-06-22 11:10:28 +03:00
id uuid NOT NULL CONSTRAINT dashboard_pkey PRIMARY KEY,
created_time bigint NOT NULL,
configuration varchar(10000000),
assigned_customers varchar(1000000),
2017-07-17 17:32:32 +03:00
search_text varchar(255),
2020-06-22 11:10:28 +03:00
tenant_id uuid,
2017-07-17 17:32:32 +03:00
title varchar(255)
);
2020-08-18 18:58:53 +03:00
CREATE TABLE IF NOT EXISTS device_profile (
id uuid NOT NULL CONSTRAINT device_profile_pkey PRIMARY KEY,
created_time bigint NOT NULL,
name varchar(255),
2020-08-20 19:44:29 +03:00
type varchar(255),
transport_type varchar(255),
profile_data jsonb,
2020-08-18 18:58:53 +03:00
description varchar,
search_text varchar(255),
is_default boolean,
tenant_id uuid,
default_rule_chain_id uuid,
CONSTRAINT device_profile_name_unq_key UNIQUE (tenant_id, name)
);
2020-08-20 19:44:29 +03:00
CREATE TABLE IF NOT EXISTS device (
id uuid NOT NULL CONSTRAINT device_pkey PRIMARY KEY,
created_time bigint NOT NULL,
additional_info varchar,
customer_id uuid,
device_profile_id uuid NOT NULL,
device_data jsonb,
2020-08-20 19:44:29 +03:00
type varchar(255),
name varchar(255),
label varchar(255),
search_text varchar(255),
tenant_id uuid,
CONSTRAINT device_name_unq_key UNIQUE (tenant_id, name),
CONSTRAINT fk_device_profile FOREIGN KEY (device_profile_id) REFERENCES device_profile(id)
);
CREATE TABLE IF NOT EXISTS device_credentials (
2020-06-22 11:10:28 +03:00
id uuid NOT NULL CONSTRAINT device_credentials_pkey PRIMARY KEY,
created_time bigint NOT NULL,
2017-07-17 17:32:32 +03:00
credentials_id varchar,
credentials_type varchar(255),
2017-07-17 21:19:31 +03:00
credentials_value varchar,
2020-06-22 11:10:28 +03:00
device_id uuid,
CONSTRAINT device_credentials_id_unq_key UNIQUE (credentials_id),
CONSTRAINT device_credentials_device_id_unq_key UNIQUE (device_id)
);
CREATE TABLE IF NOT EXISTS event (
2020-06-22 11:10:28 +03:00
id uuid NOT NULL CONSTRAINT event_pkey PRIMARY KEY,
created_time bigint NOT NULL,
2019-02-14 16:08:57 +02:00
body varchar(10000000),
2020-06-22 11:10:28 +03:00
entity_id uuid,
2017-07-17 17:32:32 +03:00
entity_type varchar(255),
event_type varchar(255),
event_uid varchar(255),
2020-06-22 11:10:28 +03:00
tenant_id uuid,
2020-04-22 16:16:58 +03:00
ts bigint NOT NULL,
CONSTRAINT event_unq_key UNIQUE (tenant_id, entity_type, entity_id, event_type, event_uid)
);
CREATE TABLE IF NOT EXISTS relation (
2020-06-22 11:10:28 +03:00
from_id uuid,
2017-07-17 17:32:32 +03:00
from_type varchar(255),
2020-06-22 11:10:28 +03:00
to_id uuid,
2017-07-17 17:32:32 +03:00
to_type varchar(255),
relation_type_group varchar(255),
relation_type varchar(255),
2017-07-01 20:39:00 +03:00
additional_info varchar,
2018-12-20 14:53:16 +01:00
CONSTRAINT relation_pkey PRIMARY KEY (from_id, from_type, relation_type_group, relation_type, to_id, to_type)
);
-- ) PARTITION BY LIST (relation_type_group);
--
-- CREATE TABLE other_relations PARTITION OF relation DEFAULT;
-- CREATE TABLE common_relations PARTITION OF relation FOR VALUES IN ('COMMON');
-- CREATE TABLE alarm_relations PARTITION OF relation FOR VALUES IN ('ALARM');
-- CREATE TABLE dashboard_relations PARTITION OF relation FOR VALUES IN ('DASHBOARD');
-- CREATE TABLE rule_relations PARTITION OF relation FOR VALUES IN ('RULE_CHAIN', 'RULE_NODE');
CREATE TABLE IF NOT EXISTS tb_user (
2020-06-22 11:10:28 +03:00
id uuid NOT NULL CONSTRAINT tb_user_pkey PRIMARY KEY,
created_time bigint NOT NULL,
2017-07-01 20:39:00 +03:00
additional_info varchar,
2017-07-17 17:32:32 +03:00
authority varchar(255),
2020-06-22 11:10:28 +03:00
customer_id uuid,
2017-07-17 17:32:32 +03:00
email varchar(255) UNIQUE,
first_name varchar(255),
last_name varchar(255),
search_text varchar(255),
2020-06-22 11:10:28 +03:00
tenant_id uuid
);
2020-08-20 19:44:29 +03:00
CREATE TABLE IF NOT EXISTS tenant_profile (
id uuid NOT NULL CONSTRAINT tenant_profile_pkey PRIMARY KEY,
created_time bigint NOT NULL,
name varchar(255),
profile_data jsonb,
2020-08-20 19:44:29 +03:00
description varchar,
search_text varchar(255),
is_default boolean,
isolated_tb_core boolean,
isolated_tb_rule_engine boolean,
CONSTRAINT tenant_profile_name_unq_key UNIQUE (name)
);
CREATE TABLE IF NOT EXISTS tenant (
2020-06-22 11:10:28 +03:00
id uuid NOT NULL CONSTRAINT tenant_pkey PRIMARY KEY,
created_time bigint NOT NULL,
2017-07-01 20:39:00 +03:00
additional_info varchar,
2020-08-18 18:58:53 +03:00
tenant_profile_id uuid NOT NULL,
2017-07-17 17:32:32 +03:00
address varchar,
address2 varchar,
city varchar(255),
country varchar(255),
email varchar(255),
phone varchar(255),
region varchar(255),
search_text varchar(255),
state varchar(255),
title varchar(255),
zip varchar(255),
2020-08-20 19:44:29 +03:00
CONSTRAINT fk_tenant_profile FOREIGN KEY (tenant_profile_id) REFERENCES tenant_profile(id)
2020-08-18 18:58:53 +03:00
);
CREATE TABLE IF NOT EXISTS user_credentials (
2020-06-22 11:10:28 +03:00
id uuid NOT NULL CONSTRAINT user_credentials_pkey PRIMARY KEY,
created_time bigint NOT NULL,
2017-07-17 17:32:32 +03:00
activate_token varchar(255) UNIQUE,
enabled boolean,
2017-07-17 17:32:32 +03:00
password varchar(255),
reset_token varchar(255) UNIQUE,
2020-06-22 11:10:28 +03:00
user_id uuid UNIQUE
);
CREATE TABLE IF NOT EXISTS widget_type (
2020-06-22 11:10:28 +03:00
id uuid NOT NULL CONSTRAINT widget_type_pkey PRIMARY KEY,
created_time bigint NOT NULL,
2017-07-17 17:32:32 +03:00
alias varchar(255),
bundle_alias varchar(255),
2017-07-03 11:34:11 +03:00
descriptor varchar(1000000),
2017-07-17 17:32:32 +03:00
name varchar(255),
2020-06-22 11:10:28 +03:00
tenant_id uuid
);
CREATE TABLE IF NOT EXISTS widgets_bundle (
2020-06-22 11:10:28 +03:00
id uuid NOT NULL CONSTRAINT widgets_bundle_pkey PRIMARY KEY,
created_time bigint NOT NULL,
2017-07-17 17:32:32 +03:00
alias varchar(255),
search_text varchar(255),
2020-06-22 11:10:28 +03:00
tenant_id uuid,
2017-07-17 17:32:32 +03:00
title varchar(255)
2018-03-12 12:28:16 +02:00
);
CREATE TABLE IF NOT EXISTS rule_chain (
2020-06-22 11:10:28 +03:00
id uuid NOT NULL CONSTRAINT rule_chain_pkey PRIMARY KEY,
created_time bigint NOT NULL,
2018-03-12 12:28:16 +02:00
additional_info varchar,
configuration varchar(10000000),
name varchar(255),
2020-06-22 11:10:28 +03:00
first_rule_node_id uuid,
2018-03-14 12:19:33 +02:00
root boolean,
debug_mode boolean,
2018-03-12 12:28:16 +02:00
search_text varchar(255),
2020-06-22 11:10:28 +03:00
tenant_id uuid
2018-03-12 12:28:16 +02:00
);
CREATE TABLE IF NOT EXISTS rule_node (
2020-06-22 11:10:28 +03:00
id uuid NOT NULL CONSTRAINT rule_node_pkey PRIMARY KEY,
created_time bigint NOT NULL,
rule_chain_id uuid,
2018-03-12 12:28:16 +02:00
additional_info varchar,
configuration varchar(10000000),
type varchar(255),
name varchar(255),
debug_mode boolean,
2018-03-12 12:28:16 +02:00
search_text varchar(255)
);
2018-10-09 18:51:10 +03:00
CREATE TABLE IF NOT EXISTS entity_view (
2020-06-22 11:10:28 +03:00
id uuid NOT NULL CONSTRAINT entity_view_pkey PRIMARY KEY,
created_time bigint NOT NULL,
entity_id uuid,
2018-09-05 19:29:42 +03:00
entity_type varchar(255),
2020-06-22 11:10:28 +03:00
tenant_id uuid,
customer_id uuid,
2018-10-09 18:51:10 +03:00
type varchar(255),
2018-09-05 19:29:42 +03:00
name varchar(255),
2018-11-09 12:49:51 +02:00
keys varchar(10000000),
start_ts bigint,
end_ts bigint,
search_text varchar(255),
2018-09-05 19:29:42 +03:00
additional_info varchar
);
2020-04-22 13:03:53 +03:00
2020-07-07 18:02:29 +03:00
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)
);
2020-04-22 16:16:58 +03:00
CREATE OR REPLACE PROCEDURE cleanup_events_by_ttl(IN ttl bigint, IN debug_ttl bigint, INOUT deleted bigint)
2020-04-22 13:03:53 +03:00
LANGUAGE plpgsql AS
$$
DECLARE
ttl_ts bigint;
2020-04-22 16:16:58 +03:00
debug_ttl_ts bigint;
ttl_deleted_count bigint DEFAULT 0;
debug_ttl_deleted_count bigint DEFAULT 0;
2020-04-22 13:03:53 +03:00
BEGIN
2020-04-22 16:16:58 +03:00
IF ttl > 0 THEN
ttl_ts := (EXTRACT(EPOCH FROM current_timestamp) * 1000 - ttl::bigint * 1000)::bigint;
2020-04-22 13:03:53 +03:00
EXECUTE format(
2020-04-22 16:16:58 +03:00
'WITH deleted AS (DELETE FROM event WHERE ts < %L::bigint AND (event_type != %L::varchar AND event_type != %L::varchar) RETURNING *) SELECT count(*) FROM deleted', ttl_ts, 'DEBUG_RULE_NODE', 'DEBUG_RULE_CHAIN') into ttl_deleted_count;
2020-04-22 13:03:53 +03:00
END IF;
2020-04-22 16:16:58 +03:00
IF debug_ttl > 0 THEN
debug_ttl_ts := (EXTRACT(EPOCH FROM current_timestamp) * 1000 - debug_ttl::bigint * 1000)::bigint;
EXECUTE format(
'WITH deleted AS (DELETE FROM event WHERE ts < %L::bigint AND (event_type = %L::varchar OR event_type = %L::varchar) RETURNING *) SELECT count(*) FROM deleted', debug_ttl_ts, 'DEBUG_RULE_NODE', 'DEBUG_RULE_CHAIN') into debug_ttl_deleted_count;
END IF;
RAISE NOTICE 'Events removed by ttl: %', ttl_deleted_count;
RAISE NOTICE 'Debug Events removed by ttl: %', debug_ttl_deleted_count;
deleted := ttl_deleted_count + debug_ttl_deleted_count;
2020-04-22 13:03:53 +03:00
END
$$;
2020-07-07 18:02:29 +03:00
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;