All Downloads are FREE. Search and download functionalities are using the official Maven repository.

db.migration.postgresql.V3_3_0__Merge_Jobs_Tables.sql Maven / Gradle / Ivy

There is a newer version: 4.3.20
Show newest version
/*
 *
 *  Copyright 2017 Netflix, Inc.
 *
 *     Licensed under the Apache License, Version 2.0 (the "License");
 *     you may not use this file except in compliance with the License.
 *     You may obtain a copy of the License at
 *
 *         http://www.apache.org/licenses/LICENSE-2.0
 *
 *     Unless required by applicable law or agreed to in writing, software
 *     distributed under the License is distributed on an "AS IS" BASIS,
 *     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *     See the License for the specific language governing permissions and
 *     limitations under the License.
 *
 */

SELECT
  CURRENT_TIMESTAMP,
  'Upgrading database schema to 3.3.0';

SELECT
  CURRENT_TIMESTAMP,
  'Dropping existing foreign key constraints';

ALTER TABLE ONLY application_configs
  DROP CONSTRAINT application_configs_application_id_fkey;
ALTER TABLE ONLY application_dependencies
  DROP CONSTRAINT application_dependencies_application_id_fkey;
ALTER TABLE ONLY cluster_configs
  DROP CONSTRAINT cluster_configs_cluster_id_fkey;
ALTER TABLE ONLY cluster_dependencies
  DROP CONSTRAINT cluster_dependencies_cluster_id_fkey;
ALTER TABLE command_configs
  DROP CONSTRAINT command_configs_command_id_fkey;
ALTER TABLE ONLY command_dependencies
  DROP CONSTRAINT command_dependencies_command_id_fkey;
ALTER TABLE ONLY clusters_commands
  DROP CONSTRAINT clusters_commands_cluster_id_fkey,
  DROP CONSTRAINT clusters_commands_command_id_fkey;
ALTER TABLE ONLY commands_applications
  DROP CONSTRAINT commands_applications_application_id_fkey,
  DROP CONSTRAINT commands_applications_command_id_fkey;
ALTER TABLE ONLY jobs
  DROP CONSTRAINT jobs_cluster_id_fkey,
  DROP CONSTRAINT jobs_command_id_fkey,
  DROP CONSTRAINT jobs_id_fkey;
ALTER TABLE ONLY jobs_applications
  DROP CONSTRAINT jobs_applications_application_id_fkey,
  DROP CONSTRAINT jobs_applications_job_id_fkey;

SELECT
  CURRENT_TIMESTAMP,
  'Finished dropping existing foreign key constraints';

SELECT
  CURRENT_TIMESTAMP,
  'Dropping existing indices';

DROP INDEX
applications_name_index,
applications_status_index,
applications_type_index,
clusters_name_index,
clusters_status_index,
commands_name_index,
commands_status_index,
clusters_commands_cluster_id_index,
clusters_commands_command_id_index,
commands_applications_application_id_index,
commands_applications_command_id_index,
jobs_cluster_id_index,
jobs_cluster_name_index,
jobs_command_id_index,
jobs_command_name_index,
jobs_created_index,
jobs_finished_index,
jobs_name_index,
jobs_started_index,
jobs_status_index,
jobs_tags_index,
jobs_user_index,
jobs_applications_application_id_index,
jobs_applications_job_id_index;

SELECT
  CURRENT_TIMESTAMP,
  'Dropping existing indices';

SELECT
  CURRENT_TIMESTAMP,
  'Renaming current tables';

ALTER TABLE ONLY applications
  RENAME TO applications_320;
ALTER TABLE ONLY application_configs
  RENAME TO application_configs_320;
ALTER TABLE ONLY application_dependencies
  RENAME TO application_dependencies_320;
ALTER TABLE ONLY clusters
  RENAME TO clusters_320;
ALTER TABLE ONLY cluster_configs
  RENAME TO cluster_configs_320;
ALTER TABLE ONLY cluster_dependencies
  RENAME TO cluster_dependencies_320;
ALTER TABLE ONLY commands
  RENAME TO commands_320;
ALTER TABLE ONLY command_configs
  RENAME TO command_configs_320;
ALTER TABLE ONLY command_dependencies
  RENAME TO command_dependencies_320;
ALTER TABLE ONLY commands_applications
  RENAME TO commands_applications_320;
ALTER TABLE ONLY clusters_commands
  RENAME TO clusters_commands_320;
ALTER TABLE ONLY job_requests
  RENAME TO job_requests_320;
ALTER TABLE ONLY job_metadata
  RENAME TO job_metadata_320;
ALTER TABLE ONLY job_executions
  RENAME TO job_executions_320;
ALTER TABLE ONLY jobs
  RENAME TO jobs_320;
ALTER TABLE ONLY jobs_applications
  RENAME TO jobs_applications_320;

SELECT
  CURRENT_TIMESTAMP,
  'Finished renaming current tables';

SELECT
  CURRENT_TIMESTAMP,
  'Creating tags table';

CREATE TABLE tags (
  id             BIGSERIAL                                    NOT NULL,
  created        TIMESTAMP(3) WITHOUT TIME ZONE DEFAULT now() NOT NULL,
  updated        TIMESTAMP(3) WITHOUT TIME ZONE DEFAULT now() NOT NULL,
  entity_version INTEGER DEFAULT '0'                          NOT NULL,
  tag            VARCHAR(255)                                 NOT NULL,
  PRIMARY KEY (id)
);

CREATE UNIQUE INDEX tags_tag_unique_index
  ON tags (tag);

SELECT
  CURRENT_TIMESTAMP,
  'Finished creating tags table';

SELECT
  CURRENT_TIMESTAMP,
  'Creating files table';

CREATE TABLE files (
  id             BIGSERIAL                                    NOT NULL,
  created        TIMESTAMP(3) WITHOUT TIME ZONE DEFAULT now() NOT NULL,
  updated        TIMESTAMP(3) WITHOUT TIME ZONE DEFAULT now() NOT NULL,
  entity_version INT DEFAULT '0'                              NOT NULL,
  file           VARCHAR(1024)                                NOT NULL,
  PRIMARY KEY (id)
);

CREATE UNIQUE INDEX files_file_unique_index
  ON files (file);

SELECT
  CURRENT_TIMESTAMP,
  'Finished creating files table';

SELECT
  CURRENT_TIMESTAMP,
  'Creating criteria table';

CREATE TABLE criteria (
  id BIGSERIAL NOT NULL,
  PRIMARY KEY (id)
);

SELECT
  CURRENT_TIMESTAMP,
  'Finished creating criteria table';

SELECT
  CURRENT_TIMESTAMP,
  'Creating criteria_tags table';

CREATE TABLE criteria_tags (
  criterion_id BIGINT NOT NULL,
  tag_id       BIGINT NOT NULL,
  PRIMARY KEY (criterion_id, tag_id),
  CONSTRAINT criteria_tags_criterion_id_fkey FOREIGN KEY (criterion_id) REFERENCES criteria (id)
  ON DELETE CASCADE,
  CONSTRAINT criteria_tags_tag_id_fkey FOREIGN KEY (tag_id) REFERENCES tags (id)
  ON DELETE RESTRICT
);

CREATE INDEX criteria_tags_criterion_id_index
  ON criteria_tags (criterion_id);
CREATE INDEX criteria_tags_tag_id_index
  ON criteria_tags (tag_id);

SELECT
  CURRENT_TIMESTAMP,
  'Created criteria_tags table';

SELECT
  CURRENT_TIMESTAMP,
  'Creating applications table';

CREATE TABLE applications (
  id             BIGSERIAL                                                                        NOT NULL,
  created        TIMESTAMP(3) WITHOUT TIME ZONE DEFAULT now()                                     NOT NULL,
  updated        TIMESTAMP(3) WITHOUT TIME ZONE DEFAULT now()                                     NOT NULL,
  entity_version INT DEFAULT 0                                                                    NOT NULL,
  unique_id      VARCHAR(255)                                                                     NOT NULL,
  name           VARCHAR(255)                                                                     NOT NULL,
  genie_user     VARCHAR(255)                                                                     NOT NULL,
  version        VARCHAR(255)                                                                     NOT NULL,
  description    VARCHAR(1000) DEFAULT NULL,
  metadata       TEXT          DEFAULT NULL,
  setup_file     BIGINT        DEFAULT NULL,
  status         VARCHAR(20) DEFAULT 'INACTIVE'                                                   NOT NULL,
  type           VARCHAR(255)  DEFAULT NULL,
  PRIMARY KEY (id),
  CONSTRAINT applications_setup_file_fkey FOREIGN KEY (setup_file) REFERENCES files (id) ON DELETE RESTRICT
);

CREATE UNIQUE INDEX applications_unique_id_unique_index
  ON applications (unique_id);
CREATE INDEX applications_name_index
  ON applications (name);
CREATE INDEX applications_setup_file_index
  ON applications (setup_file);
CREATE INDEX applications_status_index
  ON applications (status);
CREATE INDEX applications_type_index
  ON applications (type);

SELECT
  CURRENT_TIMESTAMP,
  'Created applications table';

SELECT
  CURRENT_TIMESTAMP,
  'Creating applications_configs table';

CREATE TABLE applications_configs (
  application_id BIGINT NOT NULL,
  file_id        BIGINT NOT NULL,
  PRIMARY KEY (application_id, file_id),
  CONSTRAINT applications_configs_application_id_fkey FOREIGN KEY (application_id) REFERENCES applications (id)
  ON DELETE CASCADE,
  CONSTRAINT applications_configs_file_id_fkey FOREIGN KEY (file_id) REFERENCES files (id) ON DELETE RESTRICT
);

CREATE INDEX applications_configs_application_id_index
  ON applications_configs (application_id);
CREATE INDEX applications_configs_file_id_index
  ON applications_configs (file_id);

SELECT
  CURRENT_TIMESTAMP,
  'Created applications_configs table';

SELECT
  CURRENT_TIMESTAMP,
  'Creating applications_dependencies table';

CREATE TABLE applications_dependencies (
  application_id BIGINT NOT NULL,
  file_id        BIGINT NOT NULL,
  PRIMARY KEY (application_id, file_id),
  CONSTRAINT applications_dependencies_application_id_fkey FOREIGN KEY (application_id) REFERENCES applications (id)
  ON DELETE CASCADE,
  CONSTRAINT applications_dependencies_file_id_fkey FOREIGN KEY (file_id) REFERENCES files (id) ON DELETE RESTRICT
);

CREATE INDEX applications_dependencies_application_id_index
  ON applications_dependencies (application_id);
CREATE INDEX applications_dependencies_file_id_index
  ON applications_dependencies (file_id);

SELECT
  CURRENT_TIMESTAMP,
  'Finished creating new application_dependencies table';

SELECT
  CURRENT_TIMESTAMP,
  'Creating applications_tags table';

CREATE TABLE applications_tags (
  application_id BIGINT NOT NULL,
  tag_id         BIGINT NOT NULL,
  PRIMARY KEY (application_id, tag_id),
  CONSTRAINT applications_tags_application_id_fkey FOREIGN KEY (application_id) REFERENCES applications (id)
  ON DELETE CASCADE,
  CONSTRAINT applications_tags_tag_id_fkey FOREIGN KEY (tag_id) REFERENCES tags (id) ON DELETE RESTRICT
);

CREATE INDEX applications_tags_application_id_index
  ON applications_tags (application_id);
CREATE INDEX applications_tags_tags_id_index
  ON applications_tags (tag_id);

SELECT
  CURRENT_TIMESTAMP,
  'Finished creating applications_tags table';

SELECT
  CURRENT_TIMESTAMP,
  'Creating new clusters table';

CREATE TABLE clusters (
  id             BIGSERIAL                                                                       NOT NULL,
  created        TIMESTAMP(3) WITHOUT TIME ZONE DEFAULT now()                                    NOT NULL,
  updated        TIMESTAMP(3) WITHOUT TIME ZONE DEFAULT now()                                    NOT NULL,
  entity_version INT DEFAULT '0'                                                                 NOT NULL,
  unique_id      VARCHAR(255)                                                                    NOT NULL,
  name           VARCHAR(255)                                                                    NOT NULL,
  genie_user     VARCHAR(255)                                                                    NOT NULL,
  version        VARCHAR(255)                                                                    NOT NULL,
  description    VARCHAR(1000) DEFAULT NULL,
  metadata       TEXT          DEFAULT NULL,
  setup_file     BIGINT        DEFAULT NULL,
  status         VARCHAR(20) DEFAULT 'OUT_OF_SERVICE'                                            NOT NULL,
  PRIMARY KEY (id),
  CONSTRAINT clusters_setup_file_fkey FOREIGN KEY (setup_file) REFERENCES files (id) ON DELETE RESTRICT
);

CREATE UNIQUE INDEX clusters_unique_id_unique_index
  ON clusters (unique_id);
CREATE INDEX clusters_name_index
  ON clusters (name);
CREATE INDEX clusters_setup_file_index
  ON clusters (name);
CREATE INDEX clusters_status_index
  ON clusters (status);

SELECT
  CURRENT_TIMESTAMP,
  'Finished creating new clusters table';

SELECT
  CURRENT_TIMESTAMP,
  'Creating clusters_configs table';

CREATE TABLE clusters_configs (
  cluster_id BIGINT NOT NULL,
  file_id    BIGINT NOT NULL,
  PRIMARY KEY (cluster_id, file_id),
  CONSTRAINT clusters_configs_cluster_id_fkey FOREIGN KEY (cluster_id) REFERENCES clusters (id)
  ON DELETE CASCADE,
  CONSTRAINT clusters_configs_file_id_fkey FOREIGN KEY (file_id) REFERENCES files (id) ON DELETE RESTRICT
);

CREATE INDEX clusters_configs_cluster_id_index
  ON clusters_configs (cluster_id);
CREATE INDEX clusters_configs_file_id_index
  ON clusters_configs (file_id);

SELECT
  CURRENT_TIMESTAMP,
  'Created clusters_configs table';

SELECT
  CURRENT_TIMESTAMP,
  'Creating clusters_dependencies table';

CREATE TABLE clusters_dependencies (
  cluster_id BIGINT NOT NULL,
  file_id    BIGINT NOT NULL,
  PRIMARY KEY (cluster_id, file_id),
  CONSTRAINT clusters_dependencies_cluster_id_fkey FOREIGN KEY (cluster_id) REFERENCES clusters (id)
  ON DELETE CASCADE,
  CONSTRAINT clusters_dependencies_file_id_fkey FOREIGN KEY (file_id) REFERENCES files (id) ON DELETE RESTRICT
);

CREATE INDEX clusters_dependencies_cluster_id_index
  ON clusters_dependencies (cluster_id);
CREATE INDEX clusters_dependencies_file_id_index
  ON clusters_dependencies (file_id);

SELECT
  CURRENT_TIMESTAMP,
  'Finished creating new cluster_dependencies table';

SELECT
  CURRENT_TIMESTAMP,
  'Creating clusters_tags table';

CREATE TABLE clusters_tags (
  cluster_id BIGINT NOT NULL,
  tag_id     BIGINT NOT NULL,
  PRIMARY KEY (cluster_id, tag_id),
  CONSTRAINT clusters_tags_cluster_id_fkey FOREIGN KEY (cluster_id) REFERENCES clusters (id) ON DELETE CASCADE,
  CONSTRAINT clusters_tags_tag_id_fkey FOREIGN KEY (tag_id) REFERENCES tags (id) ON DELETE RESTRICT
);

CREATE INDEX clusters_tags_cluster_id_index
  ON clusters_tags (cluster_id);
CREATE INDEX clusters_tags_tags_id_index
  ON clusters_tags (tag_id);

SELECT
  CURRENT_TIMESTAMP,
  'Finished creating clusters_tags table';

SELECT
  CURRENT_TIMESTAMP,
  'Creating new commands table';

CREATE TABLE commands (
  id             BIGSERIAL                                                                        NOT NULL,
  created        TIMESTAMP(3) WITHOUT TIME ZONE DEFAULT now()                                     NOT NULL,
  updated        TIMESTAMP(3) WITHOUT TIME ZONE DEFAULT now()                                     NOT NULL,
  entity_version INT DEFAULT '0'                                                                  NOT NULL,
  unique_id      VARCHAR(255)                                                                     NOT NULL,
  name           VARCHAR(255)                                                                     NOT NULL,
  genie_user     VARCHAR(255)                                                                     NOT NULL,
  version        VARCHAR(255)                                                                     NOT NULL,
  description    VARCHAR(1000) DEFAULT NULL,
  metadata       TEXT          DEFAULT NULL,
  setup_file     BIGINT        DEFAULT NULL,
  executable     VARCHAR(255)                                                                     NOT NULL,
  check_delay    BIGINT DEFAULT '10000'                                                           NOT NULL,
  memory         INT           DEFAULT NULL,
  status         VARCHAR(20) DEFAULT 'INACTIVE'                                                   NOT NULL,
  PRIMARY KEY (id),
  CONSTRAINT commands_setup_file_fkey FOREIGN KEY (setup_file) REFERENCES files (id) ON DELETE RESTRICT
);

CREATE UNIQUE INDEX commands_unique_id_unique_index
  ON commands (unique_id);
CREATE INDEX commands_name_index
  ON commands (name);
CREATE INDEX commands_setup_file_index
  ON commands (setup_file);
CREATE INDEX commands_status_index
  ON commands (status);

SELECT
  CURRENT_TIMESTAMP,
  'Finished creating new commands table';

SELECT
  CURRENT_TIMESTAMP,
  'Creating commands_configs table';

CREATE TABLE commands_configs (
  command_id BIGINT NOT NULL,
  file_id    BIGINT NOT NULL,
  PRIMARY KEY (command_id, file_id),
  CONSTRAINT commands_configs_command_id_fkey FOREIGN KEY (command_id) REFERENCES commands (id)
  ON DELETE CASCADE,
  CONSTRAINT commands_configs_file_id_fkey FOREIGN KEY (file_id) REFERENCES files (id) ON DELETE RESTRICT
);

CREATE INDEX commands_configs_command_id_index
  ON commands_configs (command_id);
CREATE INDEX commands_configs_file_id_index
  ON commands_configs (file_id);

SELECT
  CURRENT_TIMESTAMP,
  'Created commands_configs table';

SELECT
  CURRENT_TIMESTAMP,
  'Creating commands_dependencies table';

CREATE TABLE commands_dependencies (
  command_id BIGINT NOT NULL,
  file_id    BIGINT NOT NULL,
  PRIMARY KEY (command_id, file_id),
  CONSTRAINT commands_dependencies_command_id_fkey FOREIGN KEY (command_id) REFERENCES commands (id)
  ON DELETE CASCADE,
  CONSTRAINT commands_dependencies_file_id_fkey FOREIGN KEY (file_id) REFERENCES files (id) ON DELETE RESTRICT
);

CREATE INDEX commands_dependencies_command_id_index
  ON commands_dependencies (command_id);
CREATE INDEX commands_dependencies_file_id_index
  ON commands_dependencies (file_id);

SELECT
  CURRENT_TIMESTAMP,
  'Finished creating new command_dependencies table';
SELECT
  CURRENT_TIMESTAMP,
  'Creating commands_tags table';

CREATE TABLE commands_tags (
  command_id BIGINT NOT NULL,
  tag_id     BIGINT NOT NULL,
  PRIMARY KEY (command_id, tag_id),
  CONSTRAINT commands_tags_command_id_fkey FOREIGN KEY (command_id) REFERENCES commands (id) ON DELETE CASCADE,
  CONSTRAINT commands_tags_tag_id_fkey FOREIGN KEY (tag_id) REFERENCES tags (id) ON DELETE RESTRICT
);

CREATE INDEX commands_tags_command_id_index
  ON commands_tags (command_id);
CREATE INDEX commands_tags_tags_id_index
  ON commands_tags (tag_id);

SELECT
  CURRENT_TIMESTAMP,
  'Finished creating commands_tags table';

SELECT
  CURRENT_TIMESTAMP,
  'Creating new clusters_commands table';

CREATE TABLE clusters_commands (
  cluster_id    BIGINT NOT NULL,
  command_id    BIGINT NOT NULL,
  command_order INT    NOT NULL,
  PRIMARY KEY (cluster_id, command_id, command_order),
  CONSTRAINT clusters_commands_cluster_id_fkey FOREIGN KEY (cluster_id) REFERENCES clusters (id)
  ON DELETE CASCADE,
  CONSTRAINT clusters_commands_command_id_fkey FOREIGN KEY (command_id) REFERENCES commands (id) ON DELETE RESTRICT
);

CREATE INDEX clusters_commands_cluster_id_index
  ON clusters_commands (cluster_id);
CREATE INDEX clusters_commands_command_id_index
  ON clusters_commands (command_id);

SELECT
  CURRENT_TIMESTAMP,
  'Finished creating new clusters_commands table';

SELECT
  CURRENT_TIMESTAMP,
  'Creating into new commands_applications table';

CREATE TABLE commands_applications (
  command_id        BIGINT NOT NULL,
  application_id    BIGINT NOT NULL,
  application_order INT    NOT NULL,
  PRIMARY KEY (command_id, application_id, application_order),
  CONSTRAINT commands_applications_application_id_fkey FOREIGN KEY (application_id) REFERENCES applications (id)
  ON DELETE RESTRICT,
  CONSTRAINT commands_applications_command_id_fkey FOREIGN KEY (command_id) REFERENCES commands (id)
  ON DELETE CASCADE
);

CREATE INDEX commands_applications_application_id_index
  ON commands_applications (application_id);
CREATE INDEX commands_applications_command_id_index
  ON commands_applications (command_id);

SELECT
  CURRENT_TIMESTAMP,
  'Finished creating into new commands_applications table';

SELECT
  CURRENT_TIMESTAMP,
  'Creating new jobs table';

CREATE TABLE jobs (
  -- common
  id                        BIGSERIAL                                                                               NOT NULL,
  created                   TIMESTAMP(3) WITHOUT TIME ZONE DEFAULT now()                                            NOT NULL,
  updated                   TIMESTAMP(3) WITHOUT TIME ZONE DEFAULT now()                                            NOT NULL,
  entity_version            INT DEFAULT '0'                                                                         NOT NULL,

  -- Job Request
  unique_id                 VARCHAR(255)                                                                            NOT NULL,
  name                      VARCHAR(255)                                                                            NOT NULL,
  genie_user                VARCHAR(255)                                                                            NOT NULL,
  version                   VARCHAR(255)                                                                            NOT NULL,
  command_criterion         BIGINT                         DEFAULT NULL,
  description               VARCHAR(1000)                  DEFAULT NULL,
  metadata                  TEXT                           DEFAULT NULL,
  setup_file                BIGINT                         DEFAULT NULL,
  tags                      VARCHAR(1024)                  DEFAULT NULL,
  genie_user_group          VARCHAR(255)                   DEFAULT NULL,
  disable_log_archival      BOOLEAN DEFAULT FALSE                                                                   NOT NULL,
  email                     VARCHAR(255)                   DEFAULT NULL,
  cpu_requested             INT                            DEFAULT NULL,
  memory_requested          INT                            DEFAULT NULL,
  timeout_requested         INT                            DEFAULT NULL,
  grouping                  VARCHAR(255)                   DEFAULT NULL,
  grouping_instance         VARCHAR(255)                   DEFAULT NULL,

  -- Job Metadata
  client_host               VARCHAR(255)                   DEFAULT NULL,
  user_agent                VARCHAR(1024)                  DEFAULT NULL,
  num_attachments           INT                            DEFAULT NULL,
  total_size_of_attachments BIGINT                         DEFAULT NULL,
  std_out_size              BIGINT                         DEFAULT NULL,
  std_err_size              BIGINT                         DEFAULT NULL,

  -- Job
  command_id                BIGINT                         DEFAULT NULL,
  command_name              VARCHAR(255)                   DEFAULT NULL,
  cluster_id                BIGINT                         DEFAULT NULL,
  cluster_name              VARCHAR(255)                   DEFAULT NULL,
  started                   TIMESTAMP(3) WITHOUT TIME ZONE DEFAULT NULL,
  finished                  TIMESTAMP(3) WITHOUT TIME ZONE DEFAULT NULL,
  status                    VARCHAR(20) DEFAULT 'INIT'                                                              NOT NULL,
  status_msg                VARCHAR(255)                   DEFAULT NULL,

  -- Job Execution
  host_name                 VARCHAR(255)                                                                            NOT NULL,
  process_id                INT                            DEFAULT NULL,
  exit_code                 INT                            DEFAULT NULL,
  check_delay               BIGINT                         DEFAULT NULL,
  timeout                   TIMESTAMP(3) WITHOUT TIME ZONE DEFAULT NULL,
  memory_used               INT                            DEFAULT NULL,

  -- Post Job Info
  archive_location          VARCHAR(1024)                  DEFAULT NULL,
  PRIMARY KEY (id),
  CONSTRAINT jobs_command_criterion_fkey FOREIGN KEY (command_criterion) REFERENCES criteria (id) ON DELETE RESTRICT,
  CONSTRAINT jobs_cluster_id_fkey FOREIGN KEY (cluster_id) REFERENCES clusters (id) ON DELETE RESTRICT,
  CONSTRAINT jobs_command_id_fkey FOREIGN KEY (command_id) REFERENCES commands (id) ON DELETE RESTRICT,
  CONSTRAINT jobs_setup_file_fkey FOREIGN KEY (setup_file) REFERENCES files (id) ON DELETE RESTRICT
);

CREATE UNIQUE INDEX jobs_unique_id_unique_index
  ON jobs (unique_id);
CREATE INDEX jobs_cluster_id_index
  ON jobs (cluster_id);
CREATE INDEX jobs_cluster_name_index
  ON jobs (cluster_name);
CREATE INDEX jobs_command_criterion_index
  ON jobs (command_criterion);
CREATE INDEX jobs_command_id_index
  ON jobs (command_id);
CREATE INDEX jobs_command_name_index
  ON jobs (command_name);
CREATE INDEX jobs_created_index
  ON jobs (created);
CREATE INDEX jobs_finished_index
  ON jobs (finished);
CREATE INDEX jobs_grouping_index
  ON jobs (grouping);
CREATE INDEX jobs_grouping_instance_index
  ON jobs (grouping_instance);
CREATE INDEX jobs_name_index
  ON jobs (name);
CREATE INDEX jobs_setup_file_index
  ON jobs (setup_file);
CREATE INDEX jobs_started_index
  ON jobs (started);
CREATE INDEX jobs_status_index
  ON jobs (status);
CREATE INDEX jobs_tags_index
  ON jobs (tags);
CREATE INDEX jobs_user_index
  ON jobs (genie_user);

SELECT
  CURRENT_TIMESTAMP,
  'Finished creating new jobs table';

SELECT
  CURRENT_TIMESTAMP,
  'Creating new jobs_applications table';

CREATE TABLE jobs_applications (
  job_id            BIGINT NOT NULL,
  application_id    BIGINT NOT NULL,
  application_order INT    NOT NULL,
  PRIMARY KEY (job_id, application_id, application_order),
  CONSTRAINT jobs_applications_application_id_fkey FOREIGN KEY (application_id) REFERENCES applications (id)
  ON DELETE RESTRICT,
  CONSTRAINT jobs_applications_job_id_fkey FOREIGN KEY (job_id) REFERENCES jobs (id) ON DELETE CASCADE
);

CREATE INDEX jobs_applications_application_id_index
  ON jobs_applications (application_id);
CREATE INDEX jobs_applications_job_id_index
  ON jobs_applications (job_id);

SELECT
  CURRENT_TIMESTAMP,
  'Finished creating new jobs_applications table';

SELECT
  CURRENT_TIMESTAMP,
  'Creating job_command_arguments table';

CREATE TABLE job_command_arguments (
  job_id         BIGINT         NOT NULL,
  argument       VARCHAR(10000) NOT NULL,
  argument_order INT            NOT NULL,
  PRIMARY KEY (job_id, argument_order),
  CONSTRAINT job_command_arguments_job_id_fkey FOREIGN KEY (job_id) REFERENCES jobs (id)
  ON DELETE CASCADE
);

CREATE INDEX job_command_arguments_job_id_index
  ON job_command_arguments (job_id);

SELECT
  CURRENT_TIMESTAMP,
  'Created job_command_arguments table';

SELECT
  CURRENT_TIMESTAMP,
  'Creating jobs_tags table';

CREATE TABLE jobs_tags (
  job_id BIGINT NOT NULL,
  tag_id BIGINT NOT NULL,
  PRIMARY KEY (job_id, tag_id),
  CONSTRAINT jobs_tags_job_id_fkey FOREIGN KEY (job_id) REFERENCES jobs (id) ON DELETE CASCADE,
  CONSTRAINT jobs_tags_tag_id_fkey FOREIGN KEY (tag_id) REFERENCES tags (id) ON DELETE RESTRICT
);

CREATE INDEX jobs_tags_job_id_index
  ON jobs_tags (job_id);
CREATE INDEX jobs_tags_tags_id_index
  ON jobs_tags (tag_id);

SELECT
  CURRENT_TIMESTAMP,
  'Finished creating job_tags table';

SELECT
  CURRENT_TIMESTAMP,
  'Creating jobs_cluster_criteria table';

CREATE TABLE jobs_cluster_criteria (
  job_id         BIGINT NOT NULL,
  criterion_id   BIGINT NOT NULL,
  priority_order INT    NOT NULL,
  PRIMARY KEY (job_id, criterion_id, priority_order),
  CONSTRAINT jobs_cluster_criteria_job_id_fkey FOREIGN KEY (job_id) REFERENCES jobs (id)
  ON DELETE CASCADE,
  CONSTRAINT jobs_cluster_criteria_criterion_id_fkey FOREIGN KEY (criterion_id) REFERENCES criteria (id)
  ON DELETE RESTRICT
);

CREATE INDEX jobs_cluster_criteria_job_id_index
  ON jobs_cluster_criteria (job_id);
CREATE INDEX jobs_cluster_criteria_criterion_id_index
  ON jobs_cluster_criteria (criterion_id);

SELECT
  CURRENT_TIMESTAMP,
  'Created jobs_cluster_criteria table';

SELECT
  CURRENT_TIMESTAMP,
  'Creating job_applications_requested table';

-- NOTE: Don't think we need to applications foreign key here cause user could request some bad apps
CREATE TABLE job_applications_requested (
  job_id            BIGINT       NOT NULL,
  application_id    VARCHAR(255) NOT NULL,
  application_order INT          NOT NULL,
  PRIMARY KEY (job_id, application_id, application_order),
  CONSTRAINT job_applications_requested_job_id_fkey FOREIGN KEY (job_id) REFERENCES jobs (id) ON DELETE CASCADE
);

CREATE INDEX job_applications_requested_application_id_index
  ON job_applications_requested (application_id);
CREATE INDEX job_applications_requested_job_id_index
  ON job_applications_requested (job_id);

SELECT
  CURRENT_TIMESTAMP,
  'Created job_applications_requested table';

SELECT
  CURRENT_TIMESTAMP,
  'Creating jobs_configs table';

CREATE TABLE jobs_configs (
  job_id  BIGINT NOT NULL,
  file_id BIGINT NOT NULL,
  PRIMARY KEY (job_id, file_id),
  CONSTRAINT jobs_configs_job_id_fkey FOREIGN KEY (job_id) REFERENCES jobs (id) ON DELETE CASCADE,
  CONSTRAINT jobs_configs_file_id_fkey FOREIGN KEY (file_id) REFERENCES files (id) ON DELETE RESTRICT
);

CREATE INDEX jobs_configs_job_id_index
  ON jobs_configs (job_id);
CREATE INDEX jobs_configs_file_id_index
  ON jobs_configs (file_id);

SELECT
  CURRENT_TIMESTAMP,
  'Created jobs_configs table';

SELECT
  CURRENT_TIMESTAMP,
  'Creating jobs_dependencies table';

CREATE TABLE jobs_dependencies (
  job_id  BIGINT NOT NULL,
  file_id BIGINT NOT NULL,
  PRIMARY KEY (job_id, file_id),
  CONSTRAINT jobs_dependencies_job_id_fkey FOREIGN KEY (job_id) REFERENCES jobs (id) ON DELETE CASCADE,
  CONSTRAINT jobs_dependencies_file_id_fkey FOREIGN KEY (file_id) REFERENCES files (id) ON DELETE RESTRICT
);

CREATE INDEX jobs_dependencies_job_id_index
  ON jobs_dependencies (job_id);
CREATE INDEX jobs_dependencies_file_id_index
  ON jobs_dependencies (file_id);

SELECT
  CURRENT_TIMESTAMP,
  'Finished creating new job_dependencies table';

SELECT
  CURRENT_TIMESTAMP,
  'Finished upgrading database schema to 3.3.0';

SELECT
  CURRENT_TIMESTAMP,
  'Beginning to load data from old 3.2.0 tables to 3.3.0 tables';

SELECT
  CURRENT_TIMESTAMP,
  'Loading data into applications table';

INSERT INTO applications (
  created,
  updated,
  entity_version,
  unique_id,
  name,
  genie_user,
  version,
  description,
  status,
  type
) SELECT
    created,
    updated,
    entity_version,
    id,
    name,
    genie_user,
    version,
    description,
    status,
    type
  FROM applications_320;

CREATE OR REPLACE FUNCTION genie_split_applications_320()
  RETURNS VOID AS $$
DECLARE
  app_record         RECORD;
  new_application_id BIGINT;
  found_tag_id       BIGINT;
  file_id            BIGINT;
  tags_local         VARCHAR(10000);
  application_tag    VARCHAR(255);
BEGIN
  << APPS_LOOP >>
  FOR app_record IN
  SELECT
    id,
    tags,
    setup_File
  FROM applications_320 LOOP

    SELECT a.id
    INTO new_application_id
    FROM applications a
    WHERE a.unique_id = app_record.id;

    IF app_record.setup_file IS NOT NULL
    THEN
      INSERT INTO files (file) VALUES (app_record.setup_file)
      ON CONFLICT DO NOTHING;

      SELECT f.id
      INTO file_id
      FROM files f
      WHERE f.file = app_record.setup_file;

      UPDATE applications
      SET setup_file = file_id
      WHERE id = new_application_id;
    END IF;

    tags_local = app_record.tags;
    << TAGS_LOOP >> WHILE LENGTH(tags_local) > 0 LOOP
      -- Tear OFF the LEADING |
      tags_local = TRIM(LEADING '|' FROM tags_local);
      application_tag = SPLIT_PART(tags_local, '|', 1);
      tags_local = TRIM(LEADING application_tag FROM tags_local);
      tags_local = TRIM(LEADING '|' FROM tags_local);

      INSERT INTO tags (tag) VALUES (application_tag)
      ON CONFLICT DO NOTHING;

      SELECT t.id
      INTO found_tag_id
      FROM tags t
      WHERE t.tag = application_tag;

      INSERT INTO applications_tags VALUES (new_application_id, found_tag_id);
    END LOOP TAGS_LOOP;

  END LOOP APPS_LOOP;
END;
$$ LANGUAGE plpgsql;

SELECT genie_split_applications_320();
DROP FUNCTION genie_split_applications_320();

SELECT
  CURRENT_TIMESTAMP,
  'Loaded data into applications table';

SELECT
  CURRENT_TIMESTAMP,
  'Inserting data into applications_configs table';

CREATE OR REPLACE FUNCTION genie_load_applications_configs_320()
  RETURNS VOID AS $$
DECLARE
  configs            RECORD;
  config_file        VARCHAR(1024);
  new_application_id BIGINT;
  file_id            BIGINT;
BEGIN
  << CONFIGS_LOOP >>
  FOR configs IN
  SELECT
    application_id,
    config
  FROM application_configs_320
  LOOP

    SELECT a.id
    INTO new_application_id
    FROM applications a
    WHERE a.unique_id = configs.application_id;

    INSERT INTO files (file) VALUES (configs.config)
    ON CONFLICT DO NOTHING;

    SELECT f.id
    INTO file_id
    FROM files f
    WHERE f.file = config_file;

    INSERT INTO applications_configs VALUES (new_application_id, file_id);
  END LOOP CONFIGS_LOOP;
END;
$$ LANGUAGE plpgsql;

SELECT genie_load_applications_configs_320();
DROP FUNCTION genie_load_applications_configs_320();

SELECT
  CURRENT_TIMESTAMP,
  'Finished inserting data into applications_configs table';

SELECT
  CURRENT_TIMESTAMP,
  'Inserting data into applications_dependencies table';

CREATE OR REPLACE FUNCTION genie_load_applications_dependencies_320()
  RETURNS VOID AS $$
DECLARE
  dependencies       RECORD;
  dependency_file    VARCHAR(1024);
  new_application_id BIGINT;
  file_id            BIGINT;
BEGIN
  << DEPENDENCIES_LOOP >>
  FOR dependencies IN
  SELECT
    application_id,
    dependency
  FROM application_dependencies_320
  LOOP

    SELECT a.id
    INTO new_application_id
    FROM applications a
    WHERE a.unique_id = dependencies.application_id;

    INSERT INTO files (file) VALUES (dependencies.dependency)
    ON CONFLICT DO NOTHING;

    SELECT f.id
    INTO file_id
    FROM files f
    WHERE f.file = dependency_file;

    INSERT INTO application_dependencies VALUES (new_application_id, file_id);
  END LOOP DEPENDENCIES_LOOP;
END;
$$ LANGUAGE plpgsql;

SELECT genie_load_applications_dependencies_320();
DROP FUNCTION genie_load_applications_dependencies_320();

SELECT
  CURRENT_TIMESTAMP,
  'Finished inserting data into applications_dependencies table';

SELECT
  CURRENT_TIMESTAMP,
  'Loading data into clusters table';

INSERT INTO clusters (
  created,
  updated,
  entity_version,
  unique_id,
  name,
  genie_user,
  version,
  description,
  status
) SELECT
    created,
    updated,
    entity_version,
    id,
    name,
    genie_user,
    version,
    description,
    status
  FROM clusters_320;

CREATE OR REPLACE FUNCTION genie_split_clusters_320()
  RETURNS VOID AS $$
DECLARE
  cluster_record RECORD;
  new_cluster_id BIGINT;
  found_tag_id   BIGINT;
  file_id        BIGINT;
  tags_local     VARCHAR(10000);
  cluster_tag    VARCHAR(255);
BEGIN

  << CLUSTERS_LOOP >>
  FOR cluster_record IN
  SELECT
    id,
    tags,
    setup_file
  FROM clusters_320
  LOOP

    SELECT c.id
    INTO new_cluster_id
    FROM clusters c
    WHERE c.unique_id = cluster_record.id;

    IF cluster_record.setup_file IS NOT NULL
    THEN
      INSERT INTO files (file) VALUES (cluster_record.setup_file)
      ON CONFLICT DO NOTHING;

      SELECT f.id
      INTO file_id
      FROM files f
      WHERE f.file = cluster_record.setup_file;

      UPDATE clusters c
      SET setup_file = file_id
      WHERE c.id = new_cluster_id;
    END IF;

    tags_local = cluster_record.tags;
    << TAGS_LOOP >> WHILE LENGTH(@tags_local) > 0 LOOP
      -- Tear OFF the LEADING |
      tags_local = TRIM(LEADING '|' FROM tags_local);
      cluster_tag = SPLIT_PART(tags_local, '|', 1);
      tags_local = TRIM(LEADING cluster_tag FROM tags_local);
      tags_local = TRIM(LEADING '|' FROM tags_local);

      INSERT INTO tags (tag) VALUES (cluster_tag)
      ON CONFLICT DO NOTHING;

      SELECT t.id
      INTO found_tag_id
      FROM tags t
      WHERE t.tag = cluster_tag;

      INSERT INTO clusters_tags VALUES (new_cluster_id, found_tag_id);
    END LOOP TAGS_LOOP;

  END LOOP CLUSTERS_LOOP;
END;
$$ LANGUAGE plpgsql;

SELECT genie_split_clusters_320();
DROP FUNCTION genie_split_clusters_320();

SELECT
  CURRENT_TIMESTAMP,
  'Finished loading data into clusters table';

SELECT
  CURRENT_TIMESTAMP,
  'Inserting data into clusters_configs table';

CREATE OR REPLACE FUNCTION genie_load_clusters_configs_320()
  RETURNS VOID AS $$
DECLARE
  configs        RECORD;
  config_file    VARCHAR(1024);
  new_cluster_id BIGINT;
  file_id        BIGINT;
BEGIN
  << CONFIGS_LOOP >>
  FOR configs IN
  SELECT
    cluster_id,
    config
  FROM cluster_configs_320
  LOOP

    SELECT c.id
    INTO new_cluster_id
    FROM clusters c
    WHERE c.unique_id = configs.cluster_id;

    INSERT INTO files (file) VALUES (configs.config)
    ON CONFLICT DO NOTHING;

    SELECT f.id
    INTO file_id
    FROM files f
    WHERE f.file = config_file;

    INSERT INTO clusters_configs VALUES (new_cluster_id, file_id);
  END LOOP CONFIGS_LOOP;
END;
$$ LANGUAGE plpgsql;

SELECT genie_load_clusters_configs_320();
DROP FUNCTION genie_load_clusters_configs_320();

SELECT
  CURRENT_TIMESTAMP,
  'Finished inserting data into clusters_configs table';

SELECT
  CURRENT_TIMESTAMP,
  'Inserting data into clusters_dependencies table';

CREATE OR REPLACE FUNCTION genie_load_clusters_dependencies_320()
  RETURNS VOID AS $$
DECLARE
  dependencies    RECORD;
  dependency_file VARCHAR(1024);
  new_cluster_id  BIGINT;
  file_id         BIGINT;
BEGIN
  << DEPENDENCIES_LOOP >>
  FOR dependencies IN
  SELECT
    cluster_id,
    dependency
  FROM cluster_dependencies_320
  LOOP

    SELECT c.id
    INTO new_cluster_id
    FROM clusters c
    WHERE c.unique_id = dependencies.cluster_id;

    INSERT INTO files (file) VALUES (dependencies.dependency)
    ON CONFLICT DO NOTHING;

    SELECT f.id
    INTO file_id
    FROM files f
    WHERE f.file = dependency_file;

    INSERT INTO cluster_dependencies VALUES (new_cluster_id, file_id);
  END LOOP DEPENDENCIES_LOOP;
END;
$$ LANGUAGE plpgsql;

SELECT genie_load_clusters_dependencies_320();
DROP FUNCTION genie_load_clusters_dependencies_320();

SELECT
  CURRENT_TIMESTAMP,
  'Finished inserting data into clusters_dependencies table';

SELECT
  CURRENT_TIMESTAMP,
  'Loading data into commands table';

INSERT INTO commands (
  created,
  updated,
  entity_version,
  unique_id,
  name,
  genie_user,
  version,
  description,
  executable,
  check_delay,
  memory,
  status
) SELECT
    created,
    updated,
    entity_version,
    id,
    name,
    genie_user,
    version,
    description,
    executable,
    check_delay,
    memory,
    status
  FROM commands_320;

CREATE OR REPLACE FUNCTION genie_split_commands_320()
  RETURNS VOID AS $$
DECLARE
  command_record RECORD;
  tags_local     VARCHAR(10000);
  new_command_id BIGINT;
  found_tag_id   BIGINT;
  file_id        BIGINT;
  command_tag    VARCHAR(255);
BEGIN

  << COMMANDS_LOOP >>
  FOR command_record IN
  SELECT
    id,
    tags,
    setup_file
  FROM commands_320
  LOOP

    SELECT c.id
    INTO new_command_id
    FROM commands c
    WHERE c.unique_id = command_record.id;

    IF command_record.setup_file IS NOT NULL
    THEN
      INSERT INTO files (file) VALUES (command_record.setup_file)
      ON CONFLICT DO NOTHING;

      SELECT f.id
      INTO file_id
      FROM files f
      WHERE f.file = command_record.setup_file;

      UPDATE commands c
      SET c.setup_file = file_id
      WHERE c.id = new_command_id;
    END IF;

    tags_local = command_record.tags;
    << TAGS_LOOP >> WHILE LENGTH(tags_local) > 0 LOOP
      -- Tear OFF the LEADING |
      tags_local = TRIM(LEADING '|' FROM @tags_local);
      command_tag = SPLIT_PART(tags_local, '|', 1);
      tags_local = TRIM(LEADING command_tag FROM tags_local);
      tags_local = TRIM(LEADING '|' FROM tags_local);

      INSERT INTO tags (tag) VALUES (command_tag)
      ON CONFLICT DO NOTHING;

      SELECT t.id
      INTO found_tag_id
      FROM tags t
      WHERE t.tag = command_tag;

      INSERT INTO commands_tags VALUES (new_command_id, found_tag_id);
    END LOOP TAGS_LOOP;

  END LOOP COMMANDS_LOOP;
END;
$$ LANGUAGE plpgsql;

SELECT genie_split_commands_320();
DROP FUNCTION genie_split_commands_320();

SELECT
  CURRENT_TIMESTAMP,
  'Finished loading data into commands table';

SELECT
  CURRENT_TIMESTAMP,
  'Inserting data into commands_configs table';

CREATE OR REPLACE FUNCTION genie_load_commands_configs_320()
  RETURNS VOID AS $$
DECLARE
  configs        RECORD;
  config_file    VARCHAR(1024);
  new_command_id BIGINT;
  file_id        BIGINT;
BEGIN
  << CONFIGS_LOOP >>
  FOR configs IN
  SELECT
    command_id,
    config
  FROM command_configs_320
  LOOP

    SELECT c.id
    INTO new_command_id
    FROM commands c
    WHERE c.unique_id = configs.command_id;

    INSERT INTO files (file) VALUES (configs.config)
    ON CONFLICT DO NOTHING;

    SELECT f.id
    INTO file_id
    FROM files f
    WHERE f.file = config_file;

    INSERT INTO commands_configs VALUES (new_command_id, file_id);
  END LOOP CONFIGS_LOOP;
END;
$$ LANGUAGE plpgsql;

SELECT genie_load_commands_configs_320();
DROP FUNCTION genie_load_commands_configs_320();

SELECT
  CURRENT_TIMESTAMP,
  'Finished inserting data into commands_configs table';

SELECT
  CURRENT_TIMESTAMP,
  'Inserting data into commands_dependencies table';

CREATE OR REPLACE FUNCTION genie_load_commands_dependencies_320()
  RETURNS VOID AS $$
DECLARE
  dependencies    RECORD;
  dependency_file VARCHAR(1024);
  new_command_id  BIGINT;
  file_id         BIGINT;
BEGIN
  << DEPENDENCIES_LOOP >>
  FOR dependencies IN
  SELECT
    command_id,
    dependency
  FROM command_dependencies_320
  LOOP

    SELECT c.id
    INTO new_command_id
    FROM commands c
    WHERE c.unique_id = dependencies.command_id;

    INSERT INTO files (file) VALUES (dependencies.dependency)
    ON CONFLICT DO NOTHING;

    SELECT f.id
    INTO file_id
    FROM files f
    WHERE f.file = dependency_file;

    INSERT INTO command_dependencies VALUES (new_command_id, file_id);
  END LOOP DEPENDENCIES_LOOP;
END;
$$ LANGUAGE plpgsql;

SELECT genie_load_commands_dependencies_320();
DROP FUNCTION genie_load_commands_dependencies_320();

SELECT
  CURRENT_TIMESTAMP,
  'Finished inserting data into commands_dependencies table';

SELECT
  CURRENT_TIMESTAMP,
  'Loading data into new clusters_commands table';

INSERT INTO clusters_commands (cluster_id, command_id, command_order)
  SELECT
    cl.id,
    co.id,
    cc.command_order
  FROM clusters_commands_320 cc
    JOIN clusters cl ON cc.cluster_id = cl.unique_id
    JOIN commands co ON cc.command_id = co.unique_id;

SELECT
  CURRENT_TIMESTAMP,
  'Finished loading data into new clusters_commands table';

SELECT
  CURRENT_TIMESTAMP,
  'Loading data into new commands_applications table';

INSERT INTO commands_applications (command_id, application_id, application_order)
  SELECT
    c.id,
    a.id,
    ca.application_order
  FROM commands_applications_320 ca
    JOIN commands c ON ca.command_id = c.unique_id
    JOIN applications a ON ca.application_id = a.unique_id;

SELECT
  CURRENT_TIMESTAMP,
  'Finished loading data into new commands_applications table';

SELECT
  CURRENT_TIMESTAMP,
  'Finished loading data from old 3.2.0 tables to 3.3.0 tables';




© 2015 - 2024 Weber Informatics LLC | Privacy Policy