init.sql 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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');
  32. CREATE TYPE analytics.threshold_mode AS ENUM ('LT', 'LE', 'GE', 'GT', 'NE', 'EQ');
  33. CREATE TYPE analytics.collector_type AS ENUM ('DOUBLE', 'MOLD');
  34. CREATE TYPE analytics.notify_trigger_mode AS ENUM ('INSTANT', 'ON_CHANGE', 'DISABLED');
  35. create table analytics.sensor_to_unit (
  36. id SERIAL PRIMARY KEY NOT NULL,
  37. unit_id BIGINT NOT NULL,
  38. sensor_id BIGINT NOT NULL,
  39. last_observation TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT to_timestamp(0),
  40. UNIQUE (unit_id, sensor_id)
  41. );
  42. alter table analytics.sensor_to_unit OWNER TO senslog;
  43. create table analytics.analytic_group (
  44. id SERIAL PRIMARY KEY NOT NULL,
  45. name VARCHAR(200) NOT NULL DEFAULT 'no_name',
  46. time_interval INTEGER NOT NULL, -- interval in seconds
  47. persistence BOOLEAN NOT NULL,
  48. collector_type analytics.collector_type NOT NULL,
  49. CHECK ( time_interval > 0 )
  50. );
  51. alter table analytics.analytic_group OWNER TO senslog;
  52. create table analytics.record (
  53. id SERIAL PRIMARY KEY NOT NULL,
  54. analytic_group_id INTEGER NOT NULL,
  55. attribute_type analytics.attribute_type NOT NULL,
  56. calculated_value DOUBLE PRECISION NOT NULL,
  57. time_interval INTEGER NOT NULL, -- interval in seconds
  58. time_stamp TIMESTAMP WITH TIME ZONE NOT NULL,
  59. time_created TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL,
  60. UNIQUE (analytic_group_id, attribute_type, time_stamp)
  61. );
  62. alter table analytics.record OWNER TO senslog;
  63. create table analytics.threshold (
  64. id SERIAL PRIMARY KEY NOT NULL,
  65. notify_trigger_mode analytics.notify_trigger_mode NOT NULL,
  66. attribute_type analytics.attribute_type NOT NULL,
  67. process_on_fail BOOLEAN NOT NULL,
  68. alert_enable BOOLEAN NOT NULL
  69. );
  70. alter table analytics.threshold OWNER TO senslog;
  71. create table analytics.threshold_rule (
  72. id SERIAL PRIMARY KEY NOT NULL,
  73. threshold_id INTEGER NOT NULL REFERENCES analytics.threshold(id),
  74. threshold_mode analytics.threshold_mode NOT NULL,
  75. threshold_value DOUBLE PRECISION NOT NULL
  76. );
  77. alter table analytics.threshold_rule OWNER TO senslog;
  78. create table analytics.sensor_to_unit_to_threshold (
  79. sensor_to_unit_id INTEGER REFERENCES analytics.sensor_to_unit(id),
  80. threshold_id INTEGER REFERENCES analytics.threshold(id),
  81. UNIQUE (sensor_to_unit_id, threshold_id)
  82. );
  83. alter table analytics.sensor_to_unit_to_threshold OWNER TO senslog;
  84. create table analytics.sensor_to_unit_to_analytic_group (
  85. sensor_to_unit_id INTEGER REFERENCES analytics.sensor_to_unit(id),
  86. analytic_group_id INTEGER REFERENCES analytics.analytic_group(id),
  87. time_created TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL,
  88. UNIQUE (sensor_to_unit_id, analytic_group_id)
  89. );
  90. alter table analytics.sensor_to_unit_to_analytic_group OWNER TO senslog;
  91. create table analytics.analytic_group_to_threshold (
  92. analytic_group_id INTEGER REFERENCES analytics.analytic_group(id),
  93. threshold_id INTEGER REFERENCES analytics.threshold(id),
  94. UNIQUE (analytic_group_id, threshold_id)
  95. );
  96. alter table analytics.analytic_group_to_threshold OWNER TO senslog;