From a79deda84b1444c97a787fe0c67c05b09b316dcf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20Malo=C5=A1t=C3=ADk?= <malostik@cesnet.cz>
Date: Mon, 12 Sep 2022 14:58:25 +0200
Subject: [PATCH] Make warden_3.0_postgres.sql idempotent

---
 warden_server/warden_3.0_postgres.sql | 37 ++++++++++++---------------
 1 file changed, 17 insertions(+), 20 deletions(-)

diff --git a/warden_server/warden_3.0_postgres.sql b/warden_server/warden_3.0_postgres.sql
index 40cd0f2..7ccb1dc 100644
--- a/warden_server/warden_3.0_postgres.sql
+++ b/warden_server/warden_3.0_postgres.sql
@@ -1,6 +1,6 @@
 SET TimeZone='+00:00';
 
-CREATE COLLATION case_insensitive (
+CREATE COLLATION IF NOT EXISTS case_insensitive (
   provider = icu,
   locale = 'und-u-ks-level2',
   deterministic = false
@@ -18,14 +18,14 @@ CREATE COLLATION case_insensitive (
 -- Table structure for table "categories"
 --
 
-CREATE TABLE "categories" (
+CREATE TABLE IF NOT EXISTS "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");
+CREATE INDEX IF NOT EXISTS "cat_sub" ON "categories" ("cat_subcat");
 
 -- --------------------------------------------------------
 
@@ -33,7 +33,7 @@ CREATE INDEX "cat_sub" ON "categories" ("cat_subcat");
 -- Table structure for table "clients"
 --
 
-CREATE TABLE "clients" (
+CREATE TABLE IF NOT EXISTS "clients" (
   "id" SERIAL PRIMARY KEY,
   "registered" timestamp NOT NULL DEFAULT '1970-01-01 00:00:00',
   "requestor" text NOT NULL COLLATE case_insensitive,
@@ -48,8 +48,8 @@ CREATE TABLE "clients" (
   "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");
+CREATE INDEX IF NOT EXISTS "clients_1" ON "clients" ("valid", "secret", "hostname");
+CREATE INDEX IF NOT EXISTS "clients_2" ON "clients" ("valid", "name");
 
 -- --------------------------------------------------------
 
@@ -57,18 +57,16 @@ CREATE INDEX "clients_2" ON "clients" ("valid", "name");
 -- Table structure for table "events"
 --
 
-CREATE TABLE "events" (
-  "id" BIGSERIAL PRIMARY KEY,
+CREATE TABLE IF NOT EXISTS "events" (
+  "id" bigint PRIMARY KEY GENERATED ALWAYS AS IDENTITY (MINVALUE 2),
   "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
+CREATE INDEX IF NOT EXISTS "id" ON "events" ("id", "client_id");
+CREATE INDEX IF NOT EXISTS "received" ON "events" ("received");
 
 -- --------------------------------------------------------
 
@@ -76,28 +74,27 @@ SELECT nextval('events_id_seq'); -- AUTO_INCREMENT = 2
 -- Table structure for table "event_category_mapping"
 --
 
-CREATE TABLE "event_category_mapping" (
+CREATE TABLE IF NOT EXISTS "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" (
+CREATE TABLE IF NOT EXISTS "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");
+CREATE INDEX IF NOT EXISTS "client_id" ON "last_events" ("client_id", "event_id");
 
 -- --------------------------------------------------------
 
@@ -105,13 +102,13 @@ CREATE INDEX "client_id" ON "last_events" ("client_id", "event_id");
 -- Table structure for table "tags"
 --
 
-CREATE TABLE "tags" (
+CREATE TABLE IF NOT EXISTS "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");
+CREATE INDEX IF NOT EXISTS "id_tag_name" ON "tags" ("id", "tag");
+CREATE INDEX IF NOT EXISTS "tag_name" ON "tags" ("tag");
 
 -- --------------------------------------------------------
 
@@ -119,7 +116,7 @@ CREATE INDEX "tag_name" ON "tags" ("tag");
 -- Table structure for table "event_tag_mapping"
 --
 
-CREATE TABLE "event_tag_mapping" (
+CREATE TABLE IF NOT EXISTS "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"),
-- 
GitLab