diff --git a/docker-compose/archiver-timescale.yml b/docker-compose/archiver-timescale.yml new file mode 100644 index 0000000000000000000000000000000000000000..6f0c17a92b7012cc83f21dce602b8d7964d2340e --- /dev/null +++ b/docker-compose/archiver-timescale.yml @@ -0,0 +1,18 @@ +version: '2' + +services: + archiver-timescale: + image: timescaledb + build: + context: timescaledb + container_name: archiver-timescale + networks: + - control + ports: + - "5432:5432/tcp" + depends_on: + - databaseds + environment: + - POSTGRES_PASSWORD=password + - TANGO_HOST=${TANGO_HOST} + restart: unless-stopped diff --git a/docker-compose/archiver.yml b/docker-compose/archiver.yml index cbe260b8fa41240c93b73df0f4d683ae81dcf7ed..afccb4cc31ba4c0ede903f109febed09d583e6df 100644 --- a/docker-compose/archiver.yml +++ b/docker-compose/archiver.yml @@ -19,22 +19,6 @@ services: - TANGO_HOST=${TANGO_HOST} restart: unless-stopped - archiver-timescaledb: - image: timescaledb - build: - context: timescaledb - container_name: archiver-timescaledb - networks: - - control - ports: - - "5432:5432/tcp" - depends_on: - - databaseds - environment: - - POSTGRES_PASSWORD=password - - TANGO_HOST=${TANGO_HOST} - restart: unless-stopped - hdbpp-es: image: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-archiver:2021-05-28 networks: diff --git a/docker-compose/timescaledb/Dockerfile b/docker-compose/timescaledb/Dockerfile index 7703edbe4a42fd13679e2ba89bab46d1a38fb7ef..98e73e5d6e806aa2df77ce4b876daea5036807b0 100644 --- a/docker-compose/timescaledb/Dockerfile +++ b/docker-compose/timescaledb/Dockerfile @@ -1,7 +1,13 @@ FROM timescale/timescaledb:latest-pg12 -#COPY resources/01_admin.sql docker-entrypoint-initdb.d/002_admin.sql + +# COPY resources/01_admin.sql docker-entrypoint-initdb.d/002_admin.sql COPY resources/02_hdb_schema.sql docker-entrypoint-initdb.d/003_hdb_schema.sql COPY resources/03_hdb_roles.sql docker-entrypoint-initdb.d/004_hdb_roles.sql COPY resources/04_hdb_ext_aggregates.sql docker-entrypoint-initdb.d/005_hdb_ext_aggregates.sql -#COPY resources/05_cleanup.sql docker-entrypoint-initdb.d/006_cleanup.sql +# COPY resources/05_cleanup.sql docker-entrypoint-initdb.d/006_cleanup.sql + +# 2nd version +#COPY resources_v2/schema.sql docker-entrypoint-initdb.d/002_schema.sql +#COPY resources_v2/schema.sql docker-entrypoint-initdb.d/003_users.sql +#COPY resources_v2/schema.sql docker-entrypoint-initdb.d/004_cluster.sql diff --git a/docker-compose/timescaledb/resources_v2/cluster.sql b/docker-compose/timescaledb/resources_v2/cluster.sql new file mode 100644 index 0000000000000000000000000000000000000000..47394df44c31698a5aa80c5404d4d024cdcbab86 --- /dev/null +++ b/docker-compose/timescaledb/resources_v2/cluster.sql @@ -0,0 +1,57 @@ +ALTER TABLE att_scalar_devboolean CLUSTER ON att_scalar_devboolean_att_conf_id_data_time_idx; +ALTER TABLE att_array_devboolean CLUSTER ON att_array_devboolean_att_conf_id_data_time_idx; +ALTER TABLE att_scalar_devuchar CLUSTER ON att_scalar_devuchar_att_conf_id_data_time_idx; +ALTER TABLE att_array_devuchar CLUSTER ON att_array_devuchar_att_conf_id_data_time_idx; +ALTER TABLE att_scalar_devshort CLUSTER ON att_scalar_devshort_att_conf_id_data_time_idx; +ALTER TABLE att_array_devshort CLUSTER ON att_array_devshort_att_conf_id_data_time_idx; +ALTER TABLE att_scalar_devushort CLUSTER ON att_scalar_devushort_att_conf_id_data_time_idx; +ALTER TABLE att_array_devushort CLUSTER ON att_array_devushort_att_conf_id_data_time_idx; +ALTER TABLE att_scalar_devlong CLUSTER ON att_scalar_devlong_att_conf_id_data_time_idx; +ALTER TABLE att_array_devlong CLUSTER ON att_array_devlong_att_conf_id_data_time_idx; +ALTER TABLE att_scalar_devulong CLUSTER ON att_scalar_devulong_att_conf_id_data_time_idx; +ALTER TABLE att_array_devulong CLUSTER ON att_array_devulong_att_conf_id_data_time_idx; +ALTER TABLE att_scalar_devlong64 CLUSTER ON att_scalar_devlong64_att_conf_id_data_time_idx; +ALTER TABLE att_array_devlong64 CLUSTER ON att_array_devlong64_att_conf_id_data_time_idx; +ALTER TABLE att_scalar_devulong64 CLUSTER ON att_scalar_devulong64_att_conf_id_data_time_idx; +ALTER TABLE att_array_devulong64 CLUSTER ON att_array_devulong64_att_conf_id_data_time_idx; +ALTER TABLE att_scalar_devfloat CLUSTER ON att_scalar_devfloat_att_conf_id_data_time_idx; +ALTER TABLE att_array_devfloat CLUSTER ON att_array_devfloat_att_conf_id_data_time_idx; +ALTER TABLE att_scalar_devdouble CLUSTER ON att_scalar_devdouble_att_conf_id_data_time_idx; +ALTER TABLE att_array_devdouble CLUSTER ON att_array_devdouble_att_conf_id_data_time_idx; +ALTER TABLE att_scalar_devstring CLUSTER ON att_scalar_devstring_att_conf_id_data_time_idx; +ALTER TABLE att_array_devstring CLUSTER ON att_array_devstring_att_conf_id_data_time_idx; +ALTER TABLE att_scalar_devstate CLUSTER ON att_scalar_devstate_att_conf_id_data_time_idx; +ALTER TABLE att_array_devstate CLUSTER ON att_array_devstate_att_conf_id_data_time_idx; +ALTER TABLE att_scalar_devencoded CLUSTER ON att_scalar_devencoded_att_conf_id_data_time_idx; +ALTER TABLE att_array_devencoded CLUSTER ON att_array_devencoded_att_conf_id_data_time_idx; +ALTER TABLE att_scalar_devenum CLUSTER ON att_scalar_devenum_att_conf_id_data_time_idx; +ALTER TABLE att_array_devenum CLUSTER ON att_array_devenum_att_conf_id_data_time_idx; + +CLUSTER att_scalar_devboolean; +CLUSTER att_array_devboolean; +CLUSTER att_scalar_devuchar; +CLUSTER att_array_devuchar; +CLUSTER att_scalar_devshort; +CLUSTER att_array_devshort; +CLUSTER att_scalar_devushort; +CLUSTER att_array_devushort; +CLUSTER att_scalar_devlong; +CLUSTER att_array_devlong; +CLUSTER att_scalar_devulong; +CLUSTER att_array_devulong; +CLUSTER att_scalar_devlong64; +CLUSTER att_array_devlong64; +CLUSTER att_scalar_devulong64; +CLUSTER att_array_devulong64; +CLUSTER att_scalar_devfloat; +CLUSTER att_array_devfloat; +CLUSTER att_scalar_devdouble; +CLUSTER att_array_devdouble; +CLUSTER att_scalar_devstring; +CLUSTER att_array_devstring; +CLUSTER att_scalar_devstate; +CLUSTER att_array_devstate; +CLUSTER att_scalar_devencoded; +CLUSTER att_array_devencoded; +CLUSTER att_scalar_devenum; +CLUSTER att_array_devenum; diff --git a/docker-compose/timescaledb/resources_v2/schema.sql b/docker-compose/timescaledb/resources_v2/schema.sql new file mode 100644 index 0000000000000000000000000000000000000000..c44f05f64970df0f5aabebc14c76075eb1bef757 --- /dev/null +++ b/docker-compose/timescaledb/resources_v2/schema.sql @@ -0,0 +1,665 @@ +DROP DATABASE IF EXISTS hdb; + +-- Create the hdb database and use it +CREATE DATABASE hdb; +\c hdb + +-- Add the timescaledb extension (Important) +CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE; + +------------------------------------------------------------------------------- +CREATE DOMAIN uchar AS numeric(3) -- ALT smallint + CHECK(VALUE >= 0 AND VALUE <= 255); + +CREATE DOMAIN ushort AS numeric(5) -- ALT integer + CHECK(VALUE >= 0 AND VALUE <= 65535); + +CREATE DOMAIN ulong AS numeric(10) -- ALT bigint + CHECK(VALUE >= 0 AND VALUE <= 4294967295); + +CREATE DOMAIN ulong64 AS numeric(20) + CHECK(VALUE >= 0 AND VALUE <= 18446744073709551615); + +------------------------------------------------------------------------------- +DROP TABLE IF EXISTS att_conf_type; + +-- Mappings for ths Tango Data Type (used in att_conf) +CREATE TABLE att_conf_type ( + att_conf_type_id serial NOT NULL, + type text NOT NULL, + type_num smallint NOT NULL, + PRIMARY KEY (att_conf_type_id) +); + +COMMENT ON TABLE att_conf_type is 'Attribute data type'; + +INSERT INTO att_conf_type (type, type_num) VALUES +('DEV_BOOLEAN', 1),('DEV_SHORT', 2),('DEV_LONG', 3),('DEV_FLOAT', 4), +('DEV_DOUBLE', 5),('DEV_USHORT', 6),('DEV_ULONG', 7),('DEV_STRING', 8), +('DEV_STATE', 19),('DEV_UCHAR',22),('DEV_LONG64', 23),('DEV_ULONG64', 24), +('DEV_ENCODED', 28),('DEV_ENUM', 29); + +DROP TABLE IF EXISTS att_conf_format; + +-- Mappings for ths Tango Data Format Type (used in att_conf) +CREATE TABLE att_conf_format ( + att_conf_format_id serial NOT NULL, + format text NOT NULL, + format_num smallint NOT NULL, + PRIMARY KEY (att_conf_format_id) +); + +COMMENT ON TABLE att_conf_format is 'Attribute format type'; + +INSERT INTO att_conf_format (format, format_num) VALUES +('SCALAR', 0),('SPECTRUM', 1),('IMAGE', 2); + +DROP TABLE IF EXISTS att_conf_write; + +-- Mappings for the Tango Data Write Type (used in att_conf) +CREATE TABLE att_conf_write ( + att_conf_write_id serial NOT NULL, + write text NOT NULL, + write_num smallint NOT NULL, + PRIMARY KEY (att_conf_write_id) +); + +COMMENT ON TABLE att_conf_write is 'Attribute write type'; + +INSERT INTO att_conf_write (write, write_num) VALUES +('READ', 0),('READ_WITH_WRITE', 1),('WRITE', 2),('READ_WRITE', 3); + +-- The att_conf table contains the primary key for all data tables, the +-- att_conf_id. Expanded on the normal hdb++ tables since we add information +-- about the type. +CREATE TABLE IF NOT EXISTS att_conf ( + att_conf_id serial NOT NULL, + att_name text NOT NULL, + att_conf_type_id smallint NOT NULL, + att_conf_format_id smallint NOT NULL, + att_conf_write_id smallint NOT NULL, + table_name text NOT NULL, + cs_name text NOT NULL DEFAULT '', + domain text NOT NULL DEFAULT '', + family text NOT NULL DEFAULT '', + member text NOT NULL DEFAULT '', + name text NOT NULL DEFAULT '', + ttl int, + hide boolean DEFAULT false, + PRIMARY KEY (att_conf_id), + FOREIGN KEY (att_conf_type_id) REFERENCES att_conf_type (att_conf_type_id), + FOREIGN KEY (att_conf_format_id) REFERENCES att_conf_format (att_conf_format_id), + FOREIGN KEY (att_conf_write_id) REFERENCES att_conf_write (att_conf_write_id), + UNIQUE (att_name) +); + +COMMENT ON TABLE att_conf is 'Attribute Configuration Table'; +CREATE INDEX IF NOT EXISTS att_conf_att_conf_id_idx ON att_conf (att_conf_id); +CREATE INDEX IF NOT EXISTS att_conf_att_conf_type_id_idx ON att_conf (att_conf_type_id); + +------------------------------------------------------------------------------- +DROP TABLE IF EXISTS att_history_event; + +CREATE TABLE att_history_event ( + att_history_event_id serial NOT NULL, + event text NOT NULL, + PRIMARY KEY (att_history_event_id) +); + +COMMENT ON TABLE att_history_event IS 'Attribute history events description'; +CREATE INDEX IF NOT EXISTS att_history_att_history_event_id_idx ON att_history_event (att_history_event_id); + +CREATE TABLE IF NOT EXISTS att_history ( + att_conf_id integer NOT NULL, + att_history_event_id integer NOT NULL, + event_time timestamp WITH TIME ZONE, + details json, + PRIMARY KEY (att_conf_id, event_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_history_event_id) REFERENCES att_history_event (att_history_event_id) +); + +COMMENT ON TABLE att_history is 'Attribute Configuration Events History Table'; +CREATE INDEX IF NOT EXISTS att_history_att_conf_id_inx ON att_history (att_conf_id); + +------------------------------------------------------------------------------- +CREATE TABLE IF NOT EXISTS att_parameter ( + att_conf_id integer NOT NULL, + recv_time timestamp WITH TIME ZONE NOT NULL, + label text NOT NULL DEFAULT '', + unit text NOT NULL DEFAULT '', + standard_unit text NOT NULL DEFAULT '', + display_unit text NOT NULL DEFAULT '', + format text NOT NULL DEFAULT '', + archive_rel_change text NOT NULL DEFAULT '', + archive_abs_change text NOT NULL DEFAULT '', + archive_period text NOT NULL DEFAULT '', + description text NOT NULL DEFAULT '', + details json, + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id) +); + +COMMENT ON TABLE att_parameter IS 'Attribute configuration parameters'; +CREATE INDEX IF NOT EXISTS att_parameter_recv_time_idx ON att_parameter (recv_time); +CREATE INDEX IF NOT EXISTS att_parameter_att_conf_id_idx ON att_parameter (att_conf_id); +SELECT create_hypertable('att_parameter', 'recv_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +------------------------------------------------------------------------------- +CREATE TABLE IF NOT EXISTS att_error_desc ( + att_error_desc_id serial NOT NULL, + error_desc text NOT NULL, + PRIMARY KEY (att_error_desc_id), + UNIQUE (error_desc) +); + +COMMENT ON TABLE att_error_desc IS 'Error Description Table'; +CREATE INDEX IF NOT EXISTS att_error_desc_att_error_desc_id_idx ON att_error_desc (att_error_desc_id); + +------------------------------------------------------------------------------- +CREATE TABLE IF NOT EXISTS att_scalar_devboolean ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r boolean, + value_w boolean, + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_scalar_devboolean IS 'Scalar Boolean Values Table'; +CREATE INDEX IF NOT EXISTS att_scalar_devboolean_att_conf_id_idx ON att_scalar_devboolean (att_conf_id); +CREATE INDEX IF NOT EXISTS att_scalar_devboolean_att_conf_id_data_time_idx ON att_scalar_devboolean (att_conf_id,data_time DESC); +SELECT create_hypertable('att_scalar_devboolean', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_array_devboolean ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r boolean[], + value_w boolean[], + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_array_devboolean IS 'Array Boolean Values Table'; +CREATE INDEX IF NOT EXISTS att_array_devboolean_att_conf_id_idx ON att_array_devboolean (att_conf_id); +CREATE INDEX IF NOT EXISTS att_array_devboolean_att_conf_id_data_time_idx ON att_array_devboolean (att_conf_id,data_time DESC); +SELECT create_hypertable('att_array_devboolean', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_scalar_devuchar ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r uchar, + value_w uchar, + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_scalar_devuchar IS 'Scalar UChar Values Table'; +CREATE INDEX IF NOT EXISTS att_scalar_devuchar_att_conf_id_idx ON att_scalar_devuchar (att_conf_id); +CREATE INDEX IF NOT EXISTS att_scalar_devuchar_att_conf_id_data_time_idx ON att_scalar_devuchar (att_conf_id,data_time DESC); +SELECT create_hypertable('att_scalar_devuchar', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_array_devuchar ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r uchar[], + value_w uchar[], + quality smallint, + details json, + att_error_desc_id integer, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_array_devuchar IS 'Array UChar Values Table'; +CREATE INDEX IF NOT EXISTS att_array_devuchar_att_conf_id_idx ON att_array_devuchar (att_conf_id); +CREATE INDEX IF NOT EXISTS att_array_devuchar_att_conf_id_data_time_idx ON att_array_devuchar (att_conf_id,data_time DESC); +SELECT create_hypertable('att_array_devuchar', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_scalar_devshort ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r smallint, + value_w smallint, + quality smallint, + details json, + att_error_desc_id integer, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_scalar_devshort IS 'Scalar Short Values Table'; +CREATE INDEX IF NOT EXISTS att_scalar_devshort_att_conf_id_idx ON att_scalar_devshort (att_conf_id); +CREATE INDEX IF NOT EXISTS att_scalar_devshort_att_conf_id_data_time_idx ON att_scalar_devshort (att_conf_id,data_time DESC); +SELECT create_hypertable('att_scalar_devshort', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_array_devshort ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r smallint[], + value_w smallint[], + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_array_devshort IS 'Array Short Values Table'; +CREATE INDEX IF NOT EXISTS att_array_devshort_att_conf_id_idx ON att_array_devshort (att_conf_id); +CREATE INDEX IF NOT EXISTS att_array_devshort_att_conf_id_data_time_idx ON att_array_devshort (att_conf_id,data_time DESC); +SELECT create_hypertable('att_array_devshort', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_scalar_devushort ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r ushort, + value_w ushort, + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_scalar_devushort IS 'Scalar UShort Values Table'; +CREATE INDEX IF NOT EXISTS att_scalar_devushort_att_conf_id_idx ON att_scalar_devushort (att_conf_id); +CREATE INDEX IF NOT EXISTS att_scalar_devushort_att_conf_id_data_time_idx ON att_scalar_devushort (att_conf_id,data_time DESC); +SELECT create_hypertable('att_scalar_devushort', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_array_devushort ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r ushort[], + value_w ushort[], + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_array_devushort IS 'Array UShort Values Table'; +CREATE INDEX IF NOT EXISTS att_array_devushort_att_conf_id_idx ON att_array_devushort (att_conf_id); +CREATE INDEX IF NOT EXISTS att_array_devushort_att_conf_id_data_time_idx ON att_array_devushort (att_conf_id,data_time DESC); +SELECT create_hypertable('att_array_devushort', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_scalar_devlong ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r integer, + value_w integer, + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_scalar_devlong IS 'Scalar Long Values Table'; +CREATE INDEX IF NOT EXISTS att_scalar_devlong_att_conf_id_idx ON att_scalar_devlong (att_conf_id); +CREATE INDEX IF NOT EXISTS att_scalar_devlong_att_conf_id_data_time_idx ON att_scalar_devlong (att_conf_id,data_time DESC); +SELECT create_hypertable('att_scalar_devlong', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_array_devlong ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r integer[], + value_w integer[], + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_array_devlong IS 'Array Long Values Table'; +CREATE INDEX IF NOT EXISTS att_array_devlong_att_conf_id_idx ON att_array_devlong (att_conf_id); +CREATE INDEX IF NOT EXISTS att_array_devlong_att_conf_id_data_time_idx ON att_array_devlong (att_conf_id,data_time DESC); +SELECT create_hypertable('att_array_devlong', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_scalar_devulong ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r ulong, + value_w ulong, + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_scalar_devulong IS 'Scalar ULong Values Table'; +CREATE INDEX IF NOT EXISTS att_scalar_devulong_att_conf_id_idx ON att_scalar_devulong (att_conf_id); +CREATE INDEX IF NOT EXISTS att_scalar_devulong_att_conf_id_data_time_idx ON att_scalar_devulong (att_conf_id,data_time DESC); +SELECT create_hypertable('att_scalar_devulong', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_array_devulong ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r ulong[], + value_w ulong[], + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_array_devulong IS 'Array ULong Values Table'; +CREATE INDEX IF NOT EXISTS att_array_devulong_att_conf_id_idx ON att_array_devulong (att_conf_id); +CREATE INDEX IF NOT EXISTS att_array_devulong_att_conf_id_data_time_idx ON att_array_devulong (att_conf_id,data_time DESC); +SELECT create_hypertable('att_array_devulong', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_scalar_devlong64 ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r bigint, + value_w bigint, + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_scalar_devlong64 IS 'Scalar Long64 Values Table'; +CREATE INDEX IF NOT EXISTS att_scalar_devlong64_att_conf_id_idx ON att_scalar_devlong64 (att_conf_id); +CREATE INDEX IF NOT EXISTS att_scalar_devlong64_att_conf_id_data_time_idx ON att_scalar_devlong64 (att_conf_id,data_time DESC); +SELECT create_hypertable('att_scalar_devlong64', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_array_devlong64 ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r bigint[], + value_w bigint[], + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_array_devlong64 IS 'Array Long64 Values Table'; +CREATE INDEX IF NOT EXISTS att_array_devlong64_att_conf_id_idx ON att_array_devlong64 (att_conf_id); +CREATE INDEX IF NOT EXISTS att_array_devlong64_att_conf_id_data_time_idx ON att_array_devlong64 (att_conf_id,data_time DESC); +SELECT create_hypertable('att_array_devlong64', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_scalar_devulong64 ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r ulong64, + value_w ulong64, + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_scalar_devulong64 IS 'Scalar ULong64 Values Table'; +CREATE INDEX IF NOT EXISTS att_scalar_devulong64_att_conf_id_idx ON att_scalar_devulong64 (att_conf_id); +CREATE INDEX IF NOT EXISTS att_scalar_devulong64_att_conf_id_data_time_idx ON att_scalar_devulong64 (att_conf_id,data_time DESC); +SELECT create_hypertable('att_scalar_devulong64', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_array_devulong64 ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r ulong64[], + value_w ulong64[], + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_array_devulong64 IS 'Array ULong64 Values Table'; +CREATE INDEX IF NOT EXISTS att_array_devulong64_att_conf_id_idx ON att_array_devulong64 (att_conf_id); +CREATE INDEX IF NOT EXISTS att_array_devulong64_att_conf_id_data_time_idx ON att_array_devulong64 (att_conf_id,data_time DESC); +SELECT create_hypertable('att_array_devulong64', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_scalar_devfloat ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r real, + value_w real, + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_scalar_devfloat IS 'Scalar Float Values Table'; +CREATE INDEX IF NOT EXISTS att_scalar_devfloat_att_conf_id_idx ON att_scalar_devfloat (att_conf_id); +CREATE INDEX IF NOT EXISTS att_scalar_devfloat_att_conf_id_data_time_idx ON att_scalar_devfloat (att_conf_id,data_time DESC); +SELECT create_hypertable('att_scalar_devfloat', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_array_devfloat ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r real[], + value_w real[], + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_array_devfloat IS 'Array Float Values Table'; +CREATE INDEX IF NOT EXISTS att_array_devfloat_att_conf_id_idx ON att_array_devfloat (att_conf_id); +CREATE INDEX IF NOT EXISTS att_array_devfloat_att_conf_id_data_time_idx ON att_array_devfloat (att_conf_id,data_time DESC); +SELECT create_hypertable('att_array_devfloat', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_scalar_devdouble ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r double precision, + value_w double precision, + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_scalar_devdouble IS 'Scalar Double Values Table'; +CREATE INDEX IF NOT EXISTS att_scalar_devdouble_att_conf_id_idx ON att_scalar_devdouble (att_conf_id); +CREATE INDEX IF NOT EXISTS att_scalar_devdouble_att_conf_id_data_time_idx ON att_scalar_devdouble (att_conf_id,data_time DESC); +SELECT create_hypertable('att_scalar_devdouble', 'data_time', chunk_time_interval => interval '14 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_array_devdouble ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r double precision[], + value_w double precision[], + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_array_devdouble IS 'Array Double Values Table'; +CREATE INDEX IF NOT EXISTS att_array_devdouble_att_conf_id_idx ON att_array_devdouble (att_conf_id); +CREATE INDEX IF NOT EXISTS att_array_devdouble_att_conf_id_data_time_idx ON att_array_devdouble (att_conf_id,data_time DESC); +SELECT create_hypertable('att_array_devdouble', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_scalar_devstring ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r text, + value_w text, + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_scalar_devstring IS 'Scalar String Values Table'; +CREATE INDEX IF NOT EXISTS att_scalar_devstring_att_conf_id_idx ON att_scalar_devstring (att_conf_id); +CREATE INDEX IF NOT EXISTS att_scalar_devstring_att_conf_id_data_time_idx ON att_scalar_devstring (att_conf_id,data_time DESC); +SELECT create_hypertable('att_scalar_devstring', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_array_devstring ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r text[], + value_w text[], + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_array_devstring IS 'Array String Values Table'; +CREATE INDEX IF NOT EXISTS att_array_devstring_att_conf_id_idx ON att_array_devstring (att_conf_id); +CREATE INDEX IF NOT EXISTS att_array_devstring_att_conf_id_data_time_idx ON att_array_devstring (att_conf_id,data_time DESC); +SELECT create_hypertable('att_array_devstring', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_scalar_devstate ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r integer, + value_w integer, + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_scalar_devstate IS 'Scalar State Values Table'; +CREATE INDEX IF NOT EXISTS att_scalar_devstate_att_conf_id_idx ON att_scalar_devstate (att_conf_id); +CREATE INDEX IF NOT EXISTS att_scalar_devstate_att_conf_id_data_time_idx ON att_scalar_devstate (att_conf_id,data_time DESC); +SELECT create_hypertable('att_scalar_devstate', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_array_devstate ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r integer[], + value_w integer[], + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_array_devstate IS 'Array State Values Table'; +CREATE INDEX IF NOT EXISTS att_array_devstate_att_conf_id_idx ON att_array_devstate (att_conf_id); +CREATE INDEX IF NOT EXISTS att_array_devstate_att_conf_id_data_time_idx ON att_array_devstate (att_conf_id,data_time DESC); +SELECT create_hypertable('att_array_devstate', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_scalar_devencoded ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r bytea, + value_w bytea, + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); +COMMENT ON TABLE att_scalar_devencoded IS 'Scalar DevEncoded Values Table'; +CREATE INDEX IF NOT EXISTS att_scalar_devencoded_att_conf_id_idx ON att_scalar_devencoded (att_conf_id); +CREATE INDEX IF NOT EXISTS att_scalar_devencoded_att_conf_id_data_time_idx ON att_scalar_devencoded (att_conf_id,data_time DESC); +SELECT create_hypertable('att_scalar_devencoded', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_array_devencoded ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r bytea[], + value_w bytea[], + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); +COMMENT ON TABLE att_array_devencoded IS 'Array DevEncoded Values Table'; +CREATE INDEX IF NOT EXISTS att_array_devencoded_att_conf_id_idx ON att_array_devencoded (att_conf_id); +CREATE INDEX IF NOT EXISTS att_array_devencoded_att_conf_id_data_time_idx ON att_array_devencoded (att_conf_id,data_time DESC); +SELECT create_hypertable('att_array_devencoded', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +-- The Enum tables are unique in that they store a value and text label for +-- each data point +CREATE TABLE IF NOT EXISTS att_scalar_devenum ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r_label text, + value_r smallint, + value_w_label text, + value_w smallint, + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_scalar_devenum IS 'Scalar Enum Values Table'; +CREATE INDEX IF NOT EXISTS att_scalar_devenum_att_conf_id_idx ON att_scalar_devenum (att_conf_id); +CREATE INDEX IF NOT EXISTS att_scalar_devenum_att_conf_id_data_time_idx ON att_scalar_devenum (att_conf_id,data_time DESC); +SELECT create_hypertable('att_scalar_devenum', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); + +CREATE TABLE IF NOT EXISTS att_array_devenum ( + att_conf_id integer NOT NULL, + data_time timestamp WITH TIME ZONE NOT NULL, + value_r_label text[], + value_r smallint[], + value_w_label text[], + value_w smallint[], + quality smallint, + att_error_desc_id integer, + details json, + PRIMARY KEY (att_conf_id, data_time), + FOREIGN KEY (att_conf_id) REFERENCES att_conf (att_conf_id), + FOREIGN KEY (att_error_desc_id) REFERENCES att_error_desc (att_error_desc_id) +); + +COMMENT ON TABLE att_array_devenum IS 'Array Enum Values Table'; +CREATE INDEX IF NOT EXISTS att_array_devenum_att_conf_id_idx ON att_array_devenum (att_conf_id); +CREATE INDEX IF NOT EXISTS att_array_devenum_att_conf_id_data_time_idx ON att_array_devenum (att_conf_id,data_time DESC); +SELECT create_hypertable('att_array_devenum', 'data_time', chunk_time_interval => interval '28 day', create_default_indexes => FALSE); diff --git a/docker-compose/timescaledb/resources_v2/users.sql b/docker-compose/timescaledb/resources_v2/users.sql new file mode 100644 index 0000000000000000000000000000000000000000..c4dc62f6183a7a0c1762c5b423eef096374624a9 --- /dev/null +++ b/docker-compose/timescaledb/resources_v2/users.sql @@ -0,0 +1,30 @@ +-- Roles +CREATE ROLE readonly; +CREATE ROLE readwrite; + +-- Permissions - readonly +GRANT CONNECT ON DATABASE hdb TO readonly; +GRANT USAGE ON SCHEMA public TO readonly; +GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly; +ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly; + +-- Permissions - readwrite +GRANT CONNECT ON DATABASE hdb TO readwrite; +GRANT USAGE ON SCHEMA public TO readwrite; +GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO readwrite; +ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO readwrite; +GRANT USAGE ON ALL SEQUENCES IN SCHEMA public TO readwrite; +ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE ON SEQUENCES TO readwrite; +GRANT ALL ON SCHEMA public TO readwrite; +GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO readwrite; +GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO readwrite; + +-- Users +CREATE ROLE hdb_cfg_man WITH LOGIN PASSWORD 'hdbpp'; +GRANT readwrite TO hdb_cfg_man; + +CREATE ROLE hdb_event_sub WITH LOGIN PASSWORD 'hdbpp'; +GRANT readwrite TO hdb_event_sub; + +CREATE ROLE hdb_java_reporter WITH LOGIN PASSWORD 'hdbpp'; +GRANT readonly TO hdb_java_reporter;