init.sql 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. SET statement_timeout = 0;
  2. SET lock_timeout = 0;
  3. SET idle_in_transaction_session_timeout = 0;
  4. SET client_encoding = 'UTF8';
  5. SET standard_conforming_strings = on;
  6. SELECT pg_catalog.set_config('search_path', '', false);
  7. SET check_function_bodies = false;
  8. SET xmloption = content;
  9. SET client_min_messages = warning;
  10. SET row_security = off;
  11. CREATE ROLE senslog NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT;
  12. CREATE ROLE analytics_app NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN PASSWORD 'analytics';
  13. GRANT senslog TO analytics_app;
  14. CREATE DATABASE analytics WITH TEMPLATE = template0 ENCODING = 'UTF8' LOCALE_PROVIDER = 'libc' LOCALE = 'en_US.UTF-8';
  15. ALTER DATABASE analytics OWNER TO senslog;
  16. \connect analytics
  17. SET statement_timeout = 0;
  18. SET lock_timeout = 0;
  19. SET idle_in_transaction_session_timeout = 0;
  20. SET client_encoding = 'UTF8';
  21. SET standard_conforming_strings = on;
  22. SELECT pg_catalog.set_config('search_path', '', false);
  23. SET check_function_bodies = false;
  24. SET xmloption = content;
  25. SET client_min_messages = warning;
  26. SET row_security = off;
  27. SET default_tablespace = '';
  28. CREATE SCHEMA analytics;
  29. ALTER SCHEMA analytics OWNER TO senslog;
  30. ALTER SCHEMA public OWNER TO senslog;
  31. CREATE TYPE analytics.attribute_type AS ENUM ('MIN', 'MAX', 'AVG', 'VAL', 'TIME');
  32. ALTER TYPE analytics.attribute_type OWNER TO senslog;
  33. CREATE TYPE analytics.comparison_operator AS ENUM ('LT', 'LE', 'GE', 'GT', 'NE', 'EQ');
  34. ALTER TYPE analytics.comparison_operator OWNER TO senslog;
  35. CREATE TYPE analytics.collector_type AS ENUM ('DOUBLE', 'MOLD');
  36. ALTER TYPE analytics.collector_type OWNER TO senslog;
  37. CREATE TYPE analytics.notify_trigger_mode AS ENUM ('INSTANT', 'ON_CHANGE', 'DISABLED');
  38. ALTER TYPE analytics.notify_trigger_mode OWNER TO senslog;
  39. create table analytics.sensor_to_unit (
  40. id SERIAL PRIMARY KEY NOT NULL,
  41. unit_id BIGINT NOT NULL,
  42. sensor_id BIGINT NOT NULL,
  43. name VARCHAR(200) NOT NULL,
  44. last_observation TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT to_timestamp(0),
  45. UNIQUE (unit_id, sensor_id)
  46. );
  47. alter table analytics.sensor_to_unit OWNER TO senslog;
  48. create table analytics.analytic_group (
  49. id SERIAL PRIMARY KEY NOT NULL,
  50. name VARCHAR(200) NOT NULL DEFAULT 'no_name',
  51. time_interval INTEGER NOT NULL, -- interval in seconds
  52. persistence BOOLEAN NOT NULL,
  53. collector_type analytics.collector_type NOT NULL,
  54. CHECK ( time_interval > 0 )
  55. );
  56. alter table analytics.analytic_group OWNER TO senslog;
  57. create table analytics.record (
  58. id SERIAL PRIMARY KEY NOT NULL,
  59. analytic_group_id INTEGER NOT NULL,
  60. attribute_type analytics.attribute_type NOT NULL,
  61. calculated_value DOUBLE PRECISION NOT NULL,
  62. time_interval INTEGER NOT NULL, -- interval in seconds
  63. time_stamp TIMESTAMP WITH TIME ZONE NOT NULL,
  64. time_created TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL,
  65. UNIQUE (analytic_group_id, attribute_type, time_stamp)
  66. );
  67. alter table analytics.record OWNER TO senslog;
  68. create table analytics.threshold (
  69. id SERIAL PRIMARY KEY NOT NULL,
  70. enable BOOLEAN NOT NULL,
  71. enable_alert BOOLEAN NOT NULL,
  72. enable_process BOOLEAN NOT NULL,
  73. custom_alert_message TEXT
  74. );
  75. alter table analytics.threshold OWNER TO senslog;
  76. create table analytics.threshold_dimension (
  77. id SERIAL PRIMARY KEY NOT NULL,
  78. attribute_type analytics.attribute_type NOT NULL,
  79. notify_trigger_mode analytics.notify_trigger_mode NOT NULL,
  80. threshold_id INTEGER NOT NULL REFERENCES analytics.threshold(id),
  81. UNIQUE (attribute_type, threshold_id)
  82. );
  83. alter table analytics.threshold_dimension OWNER TO senslog;
  84. create table analytics.threshold_dimension_rule (
  85. id SERIAL PRIMARY KEY NOT NULL,
  86. threshold_dimension_id INTEGER NOT NULL REFERENCES analytics.threshold_dimension(id),
  87. comparison_operator analytics.comparison_operator NOT NULL,
  88. value DOUBLE PRECISION NOT NULL
  89. );
  90. alter table analytics.threshold_dimension_rule OWNER TO senslog;
  91. create table analytics.sensor_to_unit_to_threshold (
  92. sensor_to_unit_id INTEGER REFERENCES analytics.sensor_to_unit(id),
  93. threshold_id INTEGER REFERENCES analytics.threshold(id),
  94. UNIQUE (sensor_to_unit_id, threshold_id)
  95. );
  96. alter table analytics.sensor_to_unit_to_threshold OWNER TO senslog;
  97. create table analytics.sensor_to_unit_to_analytic_group (
  98. sensor_to_unit_id INTEGER REFERENCES analytics.sensor_to_unit(id),
  99. analytic_group_id INTEGER REFERENCES analytics.analytic_group(id),
  100. time_created TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL,
  101. UNIQUE (sensor_to_unit_id, analytic_group_id)
  102. );
  103. alter table analytics.sensor_to_unit_to_analytic_group OWNER TO senslog;
  104. create table analytics.analytic_group_to_threshold (
  105. analytic_group_id INTEGER REFERENCES analytics.analytic_group(id),
  106. threshold_id INTEGER REFERENCES analytics.threshold(id),
  107. UNIQUE (analytic_group_id, threshold_id)
  108. );
  109. alter table analytics.analytic_group_to_threshold OWNER TO senslog;