diff --git a/warden_server/warden_3.0_postgres.sql b/warden_server/warden_3.0_postgres.sql new file mode 100644 index 0000000000000000000000000000000000000000..40cd0f2625f65ed775ea1ff97947bf1ff2806053 --- /dev/null +++ b/warden_server/warden_3.0_postgres.sql @@ -0,0 +1,127 @@ +SET TimeZone='+00:00'; + +CREATE COLLATION case_insensitive ( + provider = icu, + locale = 'und-u-ks-level2', + deterministic = false +); + +-- --------------------------------------------------------- + +-- +-- Database: "warden3" +-- + +-- -------------------------------------------------------- + +-- +-- Table structure for table "categories" +-- + +CREATE TABLE "categories" ( + "id" int NOT NULL UNIQUE CHECK ("id" >= 0), + "category" text NOT NULL COLLATE case_insensitive, + "subcategory" text DEFAULT NULL COLLATE case_insensitive, + "cat_subcat" text NOT NULL COLLATE case_insensitive +); + +CREATE INDEX "cat_sub" ON "categories" ("cat_subcat"); + +-- -------------------------------------------------------- + +-- +-- Table structure for table "clients" +-- + +CREATE TABLE "clients" ( + "id" SERIAL PRIMARY KEY, + "registered" timestamp NOT NULL DEFAULT '1970-01-01 00:00:00', + "requestor" text NOT NULL COLLATE case_insensitive, + "hostname" text NOT NULL COLLATE case_insensitive, + "note" text NULL COLLATE case_insensitive, + "valid" smallint NOT NULL DEFAULT '1' CHECK ("valid" >= 0), + "name" text NOT NULL, + "secret" text NULL, + "read" smallint NOT NULL DEFAULT '1' CHECK ("read" >= 0), + "debug" smallint NOT NULL DEFAULT '0' CHECK ("debug" >= 0), + "write" smallint NOT NULL DEFAULT '0' CHECK ("write" >= 0), + "test" smallint NOT NULL DEFAULT '0' CHECK ("test" >= 0) +); + +CREATE INDEX "clients_1" ON "clients" ("valid", "secret", "hostname"); +CREATE INDEX "clients_2" ON "clients" ("valid", "name"); + +-- -------------------------------------------------------- + +-- +-- Table structure for table "events" +-- + +CREATE TABLE "events" ( + "id" BIGSERIAL PRIMARY KEY, + "received" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "client_id" int NOT NULL REFERENCES "clients" ("id"), + "data" bytea NOT NULL, + "valid" smallint NOT NULL DEFAULT '1' CHECK ("valid" >= 0) +); + +CREATE INDEX "id" ON "events" ("id", "client_id"); +CREATE INDEX "received" ON "events" ("received"); + +SELECT nextval('events_id_seq'); -- AUTO_INCREMENT = 2 + +-- -------------------------------------------------------- + +-- +-- Table structure for table "event_category_mapping" +-- + +CREATE TABLE "event_category_mapping" ( + "event_id" bigint NOT NULL REFERENCES "events" ("id") ON DELETE CASCADE, + "category_id" int NOT NULL, + PRIMARY KEY ("event_id", "category_id"), + CONSTRAINT "event_category_mapping_category_id_fk" FOREIGN KEY ("category_id") REFERENCES "categories" ("id") +); + + +-- -------------------------------------------------------- + +-- +-- Table structure for table "last_events" +-- + +CREATE TABLE "last_events" ( + "id" SERIAL PRIMARY KEY, + "client_id" int NOT NULL REFERENCES "clients" ("id"), + "event_id" bigint REFERENCES "events" ("id"), + "timestamp" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE INDEX "client_id" ON "last_events" ("client_id", "event_id"); + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tags" +-- + +CREATE TABLE "tags" ( + "id" int NOT NULL UNIQUE CHECK ("id" >= 0), + "tag" text NOT NULL COLLATE case_insensitive +); + +CREATE INDEX "id_tag_name" ON "tags" ("id", "tag"); +CREATE INDEX "tag_name" ON "tags" ("tag"); + +-- -------------------------------------------------------- + +-- +-- Table structure for table "event_tag_mapping" +-- + +CREATE TABLE "event_tag_mapping" ( + "event_id" bigint NOT NULL REFERENCES "events" ("id") ON DELETE CASCADE, + "tag_id" int NOT NULL, + PRIMARY KEY ("event_id", "tag_id"), + CONSTRAINT "event_tag_mapping_tag_id_fk" FOREIGN KEY ("tag_id") REFERENCES "tags" ("id") +);