-- -- PostgreSQL schema -- ================= -- -- You should normally not be required to care about schema handling. -- Director does all the migrations for you and guides you either in -- the frontend or provides everything you need for automated migration -- handling. Please find more related information in our documentation. -- -- Please note: PostgreSQL has not all migrations as MySQL have them -- -- If you have used PostgreSQL prior the first release of director, -- you might have to recreate the schema. -- CREATE TYPE enum_activity_action AS ENUM('create', 'delete', 'modify'); CREATE TYPE enum_boolean AS ENUM('y', 'n'); CREATE TYPE enum_property_format AS ENUM('string', 'expression', 'json'); CREATE TYPE enum_object_type_all AS ENUM('object', 'template', 'apply', 'external_object'); -- TODO: can we check for an invalid CREATE TYPE enum_object_type AS ENUM('object', 'template', 'external_object'); CREATE TYPE enum_timeperiod_range_type AS ENUM('include', 'exclude'); CREATE TYPE enum_merge_behaviour AS ENUM('set', 'add', 'substract', 'override'); CREATE TYPE enum_set_merge_behaviour AS ENUM('override', 'extend', 'blacklist'); CREATE TYPE enum_command_object_type AS ENUM('object', 'template', 'external_object'); CREATE TYPE enum_apply_object_type AS ENUM('object', 'template', 'apply', 'external_object'); CREATE TYPE enum_state_name AS ENUM('OK', 'Warning', 'Critical', 'Unknown', 'Up', 'Down'); CREATE TYPE enum_type_name AS ENUM('DowntimeStart', 'DowntimeEnd', 'DowntimeRemoved', 'Custom', 'Acknowledgement', 'Problem', 'Recovery', 'FlappingStart', 'FlappingEnd'); CREATE TYPE enum_assign_type AS ENUM('assign', 'ignore'); CREATE TYPE enum_sync_rule_object_type AS ENUM( 'host', 'service', 'command', 'user', 'hostgroup', 'servicegroup', 'usergroup', 'datalistEntry', 'endpoint', 'zone' ); CREATE TYPE enum_sync_rule_update_policy AS ENUM('merge', 'override', 'ignore'); CREATE TYPE enum_sync_property_merge_policy AS ENUM('override', 'merge'); CREATE TYPE enum_sync_state AS ENUM( 'unknown', 'in-sync', 'pending-changes', 'failing' ); CREATE TYPE enum_host_service AS ENUM('host', 'service'); CREATE OR REPLACE FUNCTION unix_timestamp(timestamp with time zone) RETURNS bigint AS ' SELECT EXTRACT(EPOCH FROM $1)::bigint AS result ' LANGUAGE sql; CREATE TABLE director_activity_log ( id bigserial, object_type character varying(64) NOT NULL, object_name character varying(255) NOT NULL, action_name enum_activity_action NOT NULL, old_properties text DEFAULT NULL, new_properties text DEFAULT NULL, author character varying(64) NOT NULL, change_time timestamp with time zone NOT NULL, checksum bytea NOT NULL UNIQUE CHECK(LENGTH(checksum) = 20), parent_checksum bytea DEFAULT NULL CHECK(parent_checksum IS NULL OR LENGTH(checksum) = 20), PRIMARY KEY (id) ); CREATE INDEX activity_log_sort_idx ON director_activity_log (change_time); CREATE INDEX activity_log_search_idx ON director_activity_log (object_name); CREATE INDEX activity_log_search_idx2 ON director_activity_log (object_type, object_name, change_time); COMMENT ON COLUMN director_activity_log.old_properties IS 'Property hash, JSON'; COMMENT ON COLUMN director_activity_log.new_properties IS 'Property hash, JSON'; CREATE TABLE director_generated_config ( checksum bytea CHECK(LENGTH(checksum) = 20), director_version character varying(64) DEFAULT NULL, director_db_version integer DEFAULT NULL, duration integer DEFAULT NULL, first_activity_checksum bytea NOT NULL CHECK(LENGTH(first_activity_checksum) = 20), last_activity_checksum bytea NOT NULL CHECK(LENGTH(last_activity_checksum) = 20), PRIMARY KEY (checksum), CONSTRAINT director_generated_config_activity FOREIGN KEY (last_activity_checksum) REFERENCES director_activity_log (checksum) ON DELETE RESTRICT ON UPDATE RESTRICT ); CREATE INDEX activity_checksum ON director_generated_config (last_activity_checksum); COMMENT ON COLUMN director_generated_config.checksum IS 'SHA1(last_activity_checksum;file_path=checksum;file_path=checksum;...)'; COMMENT ON COLUMN director_generated_config.duration IS 'Config generation duration (ms)'; CREATE TABLE director_generated_file ( checksum bytea CHECK(LENGTH(checksum) = 20), content text DEFAULT NULL, cnt_object SMALLINT NOT NULL DEFAULT 0, cnt_template SMALLINT NOT NULL DEFAULT 0, PRIMARY KEY (checksum) ); COMMENT ON COLUMN director_generated_file.checksum IS 'SHA1(content)'; CREATE TABLE director_generated_config_file ( config_checksum bytea CHECK(LENGTH(config_checksum) = 20), file_checksum bytea CHECK(LENGTH(file_checksum) = 20), file_path character varying(128) NOT NULL, PRIMARY KEY (config_checksum, file_path), CONSTRAINT director_generated_config_file_config FOREIGN KEY (config_checksum) REFERENCES director_generated_config (checksum) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT director_generated_config_file_file FOREIGN KEY (file_checksum) REFERENCES director_generated_file (checksum) ON DELETE RESTRICT ON UPDATE RESTRICT ); CREATE INDEX config ON director_generated_config_file (config_checksum); CREATE INDEX checksum ON director_generated_config_file (file_checksum); COMMENT ON COLUMN director_generated_config_file.file_path IS 'e.g. zones/nafta/hosts.conf'; CREATE TABLE director_deployment_log ( id bigserial, config_checksum bytea CHECK(LENGTH(config_checksum) = 20), last_activity_checksum bytea CHECK(LENGTH(config_checksum) = 20), peer_identity character varying(64) NOT NULL, start_time timestamp with time zone NOT NULL, end_time timestamp with time zone DEFAULT NULL, abort_time timestamp with time zone DEFAULT NULL, duration_connection integer DEFAULT NULL, duration_dump integer DEFAULT NULL, stage_name CHARACTER VARYING(96), stage_collected enum_boolean DEFAULT NULL, connection_succeeded enum_boolean DEFAULT NULL, dump_succeeded enum_boolean DEFAULT NULL, startup_succeeded enum_boolean DEFAULT NULL, username character varying(64) DEFAULT NULL, startup_log text DEFAULT NULL, PRIMARY KEY (id), CONSTRAINT config_checksum FOREIGN KEY (config_checksum) REFERENCES director_generated_config (checksum) ON DELETE SET NULL ON UPDATE RESTRICT ); COMMENT ON COLUMN director_deployment_log.duration_connection IS 'The time it took to connect to an Icinga node (ms)'; COMMENT ON COLUMN director_deployment_log.duration_dump IS 'Time spent dumping the config (ms)'; COMMENT ON COLUMN director_deployment_log.username IS 'The user that triggered this deployment'; CREATE TABLE director_datalist ( id serial, list_name character varying(255) NOT NULL, owner character varying(255) NOT NULL, PRIMARY KEY (id) ); CREATE UNIQUE INDEX datalist_list_name ON director_datalist (list_name); CREATE TABLE director_datalist_entry ( list_id integer NOT NULL, entry_name character varying(255) NOT NULL, entry_value text DEFAULT NULL, format enum_property_format, PRIMARY KEY (list_id, entry_name), CONSTRAINT director_datalist_entry_datalist FOREIGN KEY (list_id) REFERENCES director_datalist (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE INDEX datalist_entry_datalist ON director_datalist_entry (list_id); CREATE TABLE director_datafield ( id serial, varname character varying(64) NOT NULL, caption character varying(255) NOT NULL, description text DEFAULT NULL, datatype character varying(255) NOT NULL, -- datatype_param? multiple ones? format enum_property_format, PRIMARY KEY (id) ); CREATE INDEX search_idx ON director_datafield (varname); CREATE TABLE director_datafield_setting ( datafield_id integer NOT NULL, setting_name character varying(64) NOT NULL, setting_value text NOT NULL, PRIMARY KEY (datafield_id, setting_name), CONSTRAINT datafield_id_settings FOREIGN KEY (datafield_id) REFERENCES director_datafield (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE INDEX director_datafield_datafield ON director_datafield_setting (datafield_id); CREATE TABLE director_schema_migration ( schema_version SMALLINT NOT NULL, migration_time TIMESTAMP WITH TIME ZONE NOT NULL, PRIMARY KEY(schema_version) ); CREATE TABLE director_setting ( setting_name character varying(64) NOT NULL, setting_value character varying(255) NOT NULL, PRIMARY KEY(setting_name) ); CREATE TABLE icinga_zone ( id serial, parent_id integer DEFAULT NULL, object_name character varying(255) NOT NULL UNIQUE, object_type enum_object_type_all NOT NULL, disabled enum_boolean NOT NULL DEFAULT 'n', is_global enum_boolean NOT NULL DEFAULT 'n', PRIMARY KEY (id), CONSTRAINT icinga_zone_parent_zone FOREIGN KEY (parent_id) REFERENCES icinga_zone (id) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE INDEX zone_parent ON icinga_zone (parent_id); CREATE TABLE icinga_zone_inheritance ( zone_id integer NOT NULL, parent_zone_id integer NOT NULL, weight integer DEFAULT NULL, PRIMARY KEY (zone_id, parent_zone_id), CONSTRAINT icinga_zone_inheritance_zone FOREIGN KEY (zone_id) REFERENCES icinga_zone (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_zone_inheritance_parent_zone FOREIGN KEY (parent_zone_id) REFERENCES icinga_zone (id) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE UNIQUE INDEX zone_inheritance_unique_order ON icinga_zone_inheritance (zone_id, weight); CREATE INDEX zone_inheritance_zone ON icinga_zone_inheritance (zone_id); CREATE INDEX zone_inheritance_zone_parent ON icinga_zone_inheritance (parent_zone_id); CREATE TABLE icinga_timeperiod ( id serial, object_name character varying(255) NOT NULL, display_name character varying(255) DEFAULT NULL, update_method character varying(64) DEFAULT NULL, zone_id integer DEFAULT NULL, object_type enum_object_type_all NOT NULL, disabled enum_boolean NOT NULL DEFAULT 'n', PRIMARY KEY (id), CONSTRAINT icinga_timeperiod_zone FOREIGN KEY (zone_id) REFERENCES icinga_zone (id) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE UNIQUE INDEX timeperiod_object_name ON icinga_timeperiod (object_name, zone_id); CREATE INDEX timeperiod_zone ON icinga_timeperiod (zone_id); COMMENT ON COLUMN icinga_timeperiod.update_method IS 'Usually LegacyTimePeriod'; CREATE TABLE icinga_timeperiod_inheritance ( timeperiod_id integer NOT NULL, parent_timeperiod_id integer NOT NULL, weight integer DEFAULT NULL, PRIMARY KEY (timeperiod_id, parent_timeperiod_id), CONSTRAINT icinga_timeperiod_inheritance_timeperiod FOREIGN KEY (timeperiod_id) REFERENCES icinga_timeperiod (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_timeperiod_inheritance_parent_timeperiod FOREIGN KEY (parent_timeperiod_id) REFERENCES icinga_timeperiod (id) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE UNIQUE INDEX timeperiod_inheritance_unique_order ON icinga_timeperiod_inheritance (timeperiod_id, weight); CREATE INDEX timeperiod_inheritance_timeperiod ON icinga_timeperiod_inheritance (timeperiod_id); CREATE INDEX timeperiod_inheritance_timeperiod_parent ON icinga_timeperiod_inheritance (parent_timeperiod_id); CREATE TABLE icinga_timeperiod_range ( timeperiod_id serial, timeperiod_key character varying(255) NOT NULL, timeperiod_value character varying(255) NOT NULL, range_type enum_timeperiod_range_type NOT NULL DEFAULT 'include', merge_behaviour enum_merge_behaviour NOT NULL DEFAULT 'set', PRIMARY KEY (timeperiod_id, range_type, timeperiod_key), CONSTRAINT icinga_timeperiod_range_timeperiod FOREIGN KEY (timeperiod_id) REFERENCES icinga_timeperiod (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE INDEX timeperiod_range_timeperiod ON icinga_timeperiod_range (timeperiod_id); COMMENT ON COLUMN icinga_timeperiod_range.timeperiod_key IS 'monday, ...'; COMMENT ON COLUMN icinga_timeperiod_range.timeperiod_value IS '00:00-24:00, ...'; COMMENT ON COLUMN icinga_timeperiod_range.range_type IS 'include -> ranges {}, exclude ranges_ignore {} - not yet'; COMMENT ON COLUMN icinga_timeperiod_range.merge_behaviour IS 'set -> = {}, add -> += {}, substract -> -= {}'; CREATE TABLE director_job ( id serial, job_name character varying(64) NOT NULL, job_class character varying(72) NOT NULL, disabled enum_boolean NOT NULL DEFAULT 'n', run_interval integer NOT NULL, -- seconds timeperiod_id integer DEFAULT NULL, last_attempt_succeeded enum_boolean DEFAULT NULL, ts_last_attempt timestamp with time zone DEFAULT NULL, ts_last_error timestamp with time zone DEFAULT NULL, last_error_message text NULL DEFAULT NULL, CONSTRAINT director_job_period FOREIGN KEY (timeperiod_id) REFERENCES icinga_timeperiod (id) ON DELETE RESTRICT ON UPDATE CASCADE, PRIMARY KEY (id) ); CREATE UNIQUE INDEX director_job_unique_job_name ON director_job (job_name); CREATE TABLE director_job_setting ( job_id integer NOT NULL, setting_name character varying(64) NOT NULL, setting_value text DEFAULT NULL, PRIMARY KEY (job_id, setting_name), CONSTRAINT director_job_setting_job FOREIGN KEY (job_id) REFERENCES director_job (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE INDEX director_job_setting_job ON director_job_setting (job_id); CREATE TABLE icinga_command ( id serial, object_name character varying(255) NOT NULL, object_type enum_object_type_all NOT NULL, disabled enum_boolean NOT NULL DEFAULT 'n', methods_execute character varying(64) DEFAULT NULL, command text DEFAULT NULL, -- env text DEFAULT NULL, timeout smallint DEFAULT NULL, zone_id integer DEFAULT NULL, PRIMARY KEY (id), CONSTRAINT icinga_command_zone FOREIGN KEY (zone_id) REFERENCES icinga_zone (id) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE UNIQUE INDEX command_object_name ON icinga_command (object_name, zone_id); CREATE INDEX command_zone ON icinga_command (zone_id); COMMENT ON COLUMN icinga_command.object_type IS 'external_object is an attempt to work with existing commands'; CREATE TABLE icinga_command_inheritance ( command_id integer NOT NULL, parent_command_id integer NOT NULL, weight integer DEFAULT NULL, PRIMARY KEY (command_id, parent_command_id), CONSTRAINT icinga_command_inheritance_command FOREIGN KEY (command_id) REFERENCES icinga_command (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_command_inheritance_parent_command FOREIGN KEY (parent_command_id) REFERENCES icinga_command (id) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE UNIQUE INDEX command_inheritance_unique_order ON icinga_command_inheritance (command_id, weight); CREATE INDEX command_inheritance_command ON icinga_command_inheritance (command_id); CREATE INDEX command_inheritance_command_parent ON icinga_command_inheritance (parent_command_id); CREATE TABLE icinga_command_argument ( id serial, command_id integer NOT NULL, argument_name character varying(64) NOT NULL, argument_value text DEFAULT NULL, argument_format enum_property_format DEFAULT NULL, key_string character varying(64) DEFAULT NULL, description text DEFAULT NULL, skip_key enum_boolean DEFAULT NULL, set_if character varying(255) DEFAULT NULL, -- (string expression, must resolve to a numeric value) set_if_format enum_property_format DEFAULT NULL, sort_order smallint DEFAULT NULL, -- -> order repeat_key enum_boolean DEFAULT NULL, required enum_boolean DEFAULT NULL, PRIMARY KEY (id), CONSTRAINT icinga_command_argument_command FOREIGN KEY (command_id) REFERENCES icinga_command (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE UNIQUE INDEX command_argument_unique_idx ON icinga_command_argument (command_id, argument_name); CREATE INDEX command_argument_sort_idx ON icinga_command_argument (command_id, sort_order); CREATE INDEX command_argument_command ON icinga_command_argument (command_id); COMMENT ON COLUMN icinga_command_argument.argument_name IS '-x, --host'; COMMENT ON COLUMN icinga_command_argument.key_string IS 'Overrides name'; COMMENT ON COLUMN icinga_command_argument.repeat_key IS 'Useful with array values'; CREATE TABLE icinga_command_field ( command_id integer NOT NULL, datafield_id integer NOT NULL, is_required enum_boolean NOT NULL, PRIMARY KEY (command_id, datafield_id), CONSTRAINT icinga_command_field_command FOREIGN KEY (command_id) REFERENCES icinga_command (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_command_field_datafield FOREIGN KEY (datafield_id) REFERENCES director_datafield (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE TABLE icinga_command_var ( command_id integer NOT NULL, varname character varying(255) NOT NULL, varvalue text DEFAULT NULL, format enum_property_format NOT NULL DEFAULT 'string', PRIMARY KEY (command_id, varname), CONSTRAINT icinga_command_var_command FOREIGN KEY (command_id) REFERENCES icinga_command (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE INDEX command_var_command ON icinga_command_var (command_id); CREATE TABLE icinga_apiuser ( id BIGSERIAL, object_name CHARACTER VARYING(255) NOT NULL, object_type enum_object_type_all NOT NULL, disabled enum_boolean NOT NULL DEFAULT 'n', password CHARACTER VARYING(255) DEFAULT NULL, client_dn CHARACTER VARYING(64) DEFAULT NULL, permissions TEXT DEFAULT NULL, PRIMARY KEY (id) ); COMMENT ON COLUMN icinga_apiuser.permissions IS 'JSON-encoded permissions'; CREATE TABLE icinga_endpoint ( id serial, zone_id integer DEFAULT NULL, object_name character varying(255) NOT NULL, object_type enum_object_type_all NOT NULL, disabled enum_boolean NOT NULL DEFAULT 'n', host character varying(255) DEFAULT NULL, port smallint DEFAULT NULL, log_duration character varying(32) DEFAULT NULL, apiuser_id INTEGER DEFAULT NULL, PRIMARY KEY (id), CONSTRAINT icinga_endpoint_zone FOREIGN KEY (zone_id) REFERENCES icinga_zone (id) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT icinga_apiuser FOREIGN KEY (apiuser_id) REFERENCES icinga_apiuser (id) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE UNIQUE INDEX endpoint_object_name ON icinga_endpoint (object_name); CREATE INDEX endpoint_zone ON icinga_endpoint (zone_id); COMMENT ON COLUMN icinga_endpoint.host IS 'IP address / hostname of remote node'; COMMENT ON COLUMN icinga_endpoint.port IS '5665 if not set'; COMMENT ON COLUMN icinga_endpoint.log_duration IS '1d if not set'; CREATE TABLE icinga_endpoint_inheritance ( endpoint_id integer NOT NULL, parent_endpoint_id integer NOT NULL, weight integer DEFAULT NULL, PRIMARY KEY (endpoint_id, parent_endpoint_id), CONSTRAINT icinga_endpoint_inheritance_endpoint FOREIGN KEY (endpoint_id) REFERENCES icinga_endpoint (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_endpoint_inheritance_parent_endpoint FOREIGN KEY (parent_endpoint_id) REFERENCES icinga_endpoint (id) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE UNIQUE INDEX endpoint_inheritance_unique_order ON icinga_endpoint_inheritance (endpoint_id, weight); CREATE INDEX endpoint_inheritance_endpoint ON icinga_endpoint_inheritance (endpoint_id); CREATE INDEX endpoint_inheritance_endpoint_parent ON icinga_endpoint_inheritance (parent_endpoint_id); CREATE TABLE icinga_host ( id serial, object_name character varying(255) NOT NULL, object_type enum_object_type_all NOT NULL, disabled enum_boolean NOT NULL DEFAULT 'n', display_name CHARACTER VARYING(255) DEFAULT NULL, address character varying(64) DEFAULT NULL, address6 character varying(45) DEFAULT NULL, check_command_id integer DEFAULT NULL, max_check_attempts integer DEFAULT NULL, check_period_id integer DEFAULT NULL, check_interval character varying(8) DEFAULT NULL, retry_interval character varying(8) DEFAULT NULL, enable_notifications enum_boolean DEFAULT NULL, enable_active_checks enum_boolean DEFAULT NULL, enable_passive_checks enum_boolean DEFAULT NULL, enable_event_handler enum_boolean DEFAULT NULL, enable_flapping enum_boolean DEFAULT NULL, enable_perfdata enum_boolean DEFAULT NULL, event_command_id integer DEFAULT NULL, flapping_threshold smallint default null, volatile enum_boolean DEFAULT NULL, zone_id integer DEFAULT NULL, command_endpoint_id integer DEFAULT NULL, notes text DEFAULT NULL, notes_url character varying(255) DEFAULT NULL, action_url character varying(255) DEFAULT NULL, icon_image character varying(255) DEFAULT NULL, icon_image_alt character varying(255) DEFAULT NULL, has_agent enum_boolean DEFAULT NULL, master_should_connect enum_boolean DEFAULT NULL, accept_config enum_boolean DEFAULT NULL, api_key character varying(40) DEFAULT NULL, PRIMARY KEY (id), CONSTRAINT icinga_host_zone FOREIGN KEY (zone_id) REFERENCES icinga_zone (id) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT icinga_host_check_period FOREIGN KEY (check_period_id) REFERENCES icinga_timeperiod (id) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT icinga_host_check_command FOREIGN KEY (check_command_id) REFERENCES icinga_command (id) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT icinga_host_event_command FOREIGN KEY (event_command_id) REFERENCES icinga_command (id) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT icinga_host_command_endpoint FOREIGN KEY (command_endpoint_id) REFERENCES icinga_endpoint (id) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE UNIQUE INDEX object_name_host ON icinga_host (object_name, zone_id); CREATE UNIQUE INDEX host_api_key ON icinga_host (api_key); CREATE INDEX host_zone ON icinga_host (zone_id); CREATE INDEX host_timeperiod ON icinga_host (check_period_id); CREATE INDEX host_check_command ON icinga_host (check_command_id); CREATE INDEX host_event_command ON icinga_host (event_command_id); CREATE INDEX host_command_endpoint ON icinga_host (command_endpoint_id); CREATE TABLE icinga_host_inheritance ( host_id integer NOT NULL, parent_host_id integer NOT NULL, weight integer DEFAULT NULL, PRIMARY KEY (host_id, parent_host_id), CONSTRAINT icinga_host_inheritance_host FOREIGN KEY (host_id) REFERENCES icinga_host (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_host_inheritance_parent_host FOREIGN KEY (parent_host_id) REFERENCES icinga_host (id) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE UNIQUE INDEX host_inheritance_unique_order ON icinga_host_inheritance (host_id, weight); CREATE INDEX host_inheritance_host ON icinga_host_inheritance (host_id); CREATE INDEX host_inheritance_host_parent ON icinga_host_inheritance (parent_host_id); CREATE TABLE icinga_host_field ( host_id integer NOT NULL, datafield_id integer NOT NULL, is_required enum_boolean NOT NULL, PRIMARY KEY (host_id, datafield_id), CONSTRAINT icinga_host_field_host FOREIGN KEY (host_id) REFERENCES icinga_host (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_host_field_datafield FOREIGN KEY (datafield_id) REFERENCES director_datafield (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE UNIQUE INDEX host_field_key ON icinga_host_field (host_id, datafield_id); CREATE INDEX host_field_host ON icinga_host_field (host_id); CREATE INDEX host_field_datafield ON icinga_host_field (datafield_id); COMMENT ON COLUMN icinga_host_field.host_id IS 'Makes only sense for templates'; CREATE TABLE icinga_host_var ( host_id integer NOT NULL, varname character varying(255) NOT NULL, varvalue text DEFAULT NULL, format enum_property_format, -- immer string vorerst PRIMARY KEY (host_id, varname), CONSTRAINT icinga_host_var_host FOREIGN KEY (host_id) REFERENCES icinga_host (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE INDEX host_var_search_idx ON icinga_host_var (varname); CREATE INDEX host_var_host ON icinga_host_var (host_id); CREATE TABLE icinga_service ( id serial, object_name character varying(255) NOT NULL, object_type enum_object_type_all NOT NULL, disabled enum_boolean DEFAULT 'n', display_name character varying(255) DEFAULT NULL, host_id INTEGER DEFAULT NULL, check_command_id integer DEFAULT NULL, max_check_attempts integer DEFAULT NULL, check_period_id integer DEFAULT NULL, check_interval character varying(8) DEFAULT NULL, retry_interval character varying(8) DEFAULT NULL, enable_notifications enum_boolean DEFAULT NULL, enable_active_checks enum_boolean DEFAULT NULL, enable_passive_checks enum_boolean DEFAULT NULL, enable_event_handler enum_boolean DEFAULT NULL, enable_flapping enum_boolean DEFAULT NULL, enable_perfdata enum_boolean DEFAULT NULL, event_command_id integer DEFAULT NULL, flapping_threshold smallint DEFAULT NULL, volatile enum_boolean DEFAULT NULL, zone_id integer DEFAULT NULL, command_endpoint_id integer DEFAULT NULL, notes text DEFAULT NULL, notes_url character varying(255) DEFAULT NULL, action_url character varying(255) DEFAULT NULL, icon_image character varying(255) DEFAULT NULL, icon_image_alt character varying(255) DEFAULT NULL, use_agent enum_boolean DEFAULT NULL, PRIMARY KEY (id), -- UNIQUE INDEX object_name (object_name, zone_id), CONSTRAINT icinga_service_host FOREIGN KEY (host_id) REFERENCES icinga_host (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_service_zone FOREIGN KEY (zone_id) REFERENCES icinga_zone (id) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT icinga_service_check_period FOREIGN KEY (check_period_id) REFERENCES icinga_timeperiod (id) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT icinga_service_check_command FOREIGN KEY (check_command_id) REFERENCES icinga_command (id) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT icinga_service_event_command FOREIGN KEY (event_command_id) REFERENCES icinga_command (id) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT icinga_service_command_endpoint FOREIGN KEY (command_endpoint_id) REFERENCES icinga_endpoint (id) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE INDEX service_zone ON icinga_service (zone_id); CREATE INDEX service_timeperiod ON icinga_service (check_period_id); CREATE INDEX service_check_command ON icinga_service (check_command_id); CREATE INDEX service_event_command ON icinga_service (event_command_id); CREATE INDEX service_command_endpoint ON icinga_service (command_endpoint_id); CREATE TABLE icinga_service_inheritance ( service_id integer NOT NULL, parent_service_id integer NOT NULL, weight integer DEFAULT NULL, PRIMARY KEY (service_id, parent_service_id), CONSTRAINT icinga_service_inheritance_service FOREIGN KEY (service_id) REFERENCES icinga_service (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_service_inheritance_parent_service FOREIGN KEY (parent_service_id) REFERENCES icinga_service (id) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE UNIQUE INDEX service_inheritance_unique_order ON icinga_service_inheritance (service_id, weight); CREATE INDEX service_inheritance_service ON icinga_service_inheritance (service_id); CREATE INDEX service_inheritance_service_parent ON icinga_service_inheritance (parent_service_id); CREATE TABLE icinga_service_var ( service_id integer NOT NULL, varname character varying(255) NOT NULL, varvalue text DEFAULT NULL, format enum_property_format, PRIMARY KEY (service_id, varname), CONSTRAINT icinga_service_var_service FOREIGN KEY (service_id) REFERENCES icinga_service (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE INDEX service_var_search_idx ON icinga_service_var (varname); CREATE INDEX service_var_service ON icinga_service_var (service_id); CREATE TABLE icinga_service_field ( service_id integer NOT NULL, datafield_id integer NOT NULL, is_required enum_boolean NOT NULL, PRIMARY KEY (service_id, datafield_id), CONSTRAINT icinga_service_field_service FOREIGN KEY (service_id) REFERENCES icinga_service (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_service_field_datafield FOREIGN KEY (datafield_id) REFERENCES director_datafield (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE UNIQUE INDEX service_field_key ON icinga_service_field (service_id, datafield_id); CREATE INDEX service_field_service ON icinga_service_field (service_id); CREATE INDEX service_field_datafield ON icinga_service_field (datafield_id); COMMENT ON COLUMN icinga_service_field.service_id IS 'Makes only sense for templates'; CREATE TABLE icinga_service_assignment ( id bigserial, service_id integer NOT NULL, filter_string TEXT NOT NULL, assign_type enum_assign_type NOT NULL DEFAULT 'assign', PRIMARY KEY (id), CONSTRAINT icinga_service_assignment FOREIGN KEY (service_id) REFERENCES icinga_service (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE TABLE icinga_host_service ( host_id integer NOT NULL, service_id integer NOT NULL, PRIMARY KEY (host_id, service_id), CONSTRAINT icinga_host_service_host FOREIGN KEY (host_id) REFERENCES icinga_host (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_host_service_service FOREIGN KEY (service_id) REFERENCES icinga_service (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE INDEX host_service_host ON icinga_host_service (host_id); CREATE INDEX host_service_service ON icinga_host_service (service_id); CREATE TABLE icinga_hostgroup ( id serial, object_name character varying(255) NOT NULL, object_type enum_object_type_all NOT NULL, disabled enum_boolean NOT NULL DEFAULT 'n', display_name character varying(255) DEFAULT NULL, PRIMARY KEY (id) ); CREATE UNIQUE INDEX hostgroup_object_name ON icinga_hostgroup (object_name); CREATE INDEX hostgroup_search_idx ON icinga_hostgroup (display_name); -- -- TODO: probably useless CREATE TABLE icinga_hostgroup_inheritance ( hostgroup_id integer NOT NULL, parent_hostgroup_id integer NOT NULL, weight integer DEFAULT NULL, PRIMARY KEY (hostgroup_id, parent_hostgroup_id), CONSTRAINT icinga_hostgroup_inheritance_hostgroup FOREIGN KEY (hostgroup_id) REFERENCES icinga_hostgroup (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_hostgroup_inheritance_parent_hostgroup FOREIGN KEY (parent_hostgroup_id) REFERENCES icinga_hostgroup (id) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE UNIQUE INDEX hostgroup_inheritance_unique_order ON icinga_hostgroup_inheritance (hostgroup_id, weight); CREATE INDEX hostgroup_inheritance_hostgroup ON icinga_hostgroup_inheritance (hostgroup_id); CREATE INDEX hostgroup_inheritance_hostgroup_parent ON icinga_hostgroup_inheritance (parent_hostgroup_id); CREATE TABLE icinga_servicegroup ( id serial, object_name character varying(255) DEFAULT NULL, object_type enum_object_type_all NOT NULL, disabled enum_boolean NOT NULL DEFAULT 'n', display_name character varying(255) DEFAULT NULL, PRIMARY KEY (id) ); CREATE UNIQUE INDEX servicegroup_object_name ON icinga_servicegroup (object_name); CREATE INDEX servicegroup_search_idx ON icinga_servicegroup (display_name); CREATE TABLE icinga_servicegroup_inheritance ( servicegroup_id integer NOT NULL, parent_servicegroup_id integer NOT NULL, weight integer DEFAULT NULL, PRIMARY KEY (servicegroup_id, parent_servicegroup_id), CONSTRAINT icinga_servicegroup_inheritance_servicegroup FOREIGN KEY (servicegroup_id) REFERENCES icinga_servicegroup (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_servicegroup_inheritance_parent_servicegroup FOREIGN KEY (parent_servicegroup_id) REFERENCES icinga_servicegroup (id) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE UNIQUE INDEX servicegroup_inheritance_unique_order ON icinga_servicegroup_inheritance (servicegroup_id, weight); CREATE INDEX servicegroup_inheritance_servicegroup ON icinga_servicegroup_inheritance (servicegroup_id); CREATE INDEX servicegroup_inheritance_servicegroup_parent ON icinga_servicegroup_inheritance (parent_servicegroup_id); CREATE TABLE icinga_servicegroup_service ( servicegroup_id integer NOT NULL, service_id integer NOT NULL, PRIMARY KEY (servicegroup_id, service_id), CONSTRAINT icinga_servicegroup_service_service FOREIGN KEY (service_id) REFERENCES icinga_service (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_servicegroup_service_servicegroup FOREIGN KEY (servicegroup_id) REFERENCES icinga_servicegroup (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE INDEX servicegroup_service_service ON icinga_servicegroup_service (service_id); CREATE INDEX servicegroup_service_servicegroup ON icinga_servicegroup_service (servicegroup_id); CREATE TABLE icinga_hostgroup_host ( hostgroup_id integer NOT NULL, host_id integer NOT NULL, PRIMARY KEY (hostgroup_id, host_id), CONSTRAINT icinga_hostgroup_host_host FOREIGN KEY (host_id) REFERENCES icinga_host (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_hostgroup_host_hostgroup FOREIGN KEY (hostgroup_id) REFERENCES icinga_hostgroup (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE INDEX hostgroup_host_host ON icinga_hostgroup_host (host_id); CREATE INDEX hostgroup_host_hostgroup ON icinga_hostgroup_host (hostgroup_id); CREATE TABLE icinga_hostgroup_parent ( hostgroup_id integer NOT NULL, parent_hostgroup_id integer NOT NULL, PRIMARY KEY (hostgroup_id, parent_hostgroup_id), CONSTRAINT icinga_hostgroup_parent_hostgroup FOREIGN KEY (hostgroup_id) REFERENCES icinga_hostgroup (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_hostgroup_parent_parent FOREIGN KEY (parent_hostgroup_id) REFERENCES icinga_hostgroup (id) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE INDEX hostgroup_parent_hostgroup ON icinga_hostgroup_parent (hostgroup_id); CREATE INDEX hostgroup_parent_parent ON icinga_hostgroup_parent (parent_hostgroup_id); CREATE TABLE icinga_user ( id serial, object_name character varying(255) DEFAULT NULL, object_type enum_object_type_all NOT NULL, disabled enum_boolean NOT NULL DEFAULT 'n', display_name character varying(255) DEFAULT NULL, email character varying(255) DEFAULT NULL, pager character varying(255) DEFAULT NULL, enable_notifications enum_boolean DEFAULT NULL, period_id integer DEFAULT NULL, zone_id integer DEFAULT NULL, PRIMARY KEY (id), CONSTRAINT icinga_user_zone FOREIGN KEY (zone_id) REFERENCES icinga_zone (id) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE UNIQUE INDEX user_object_name ON icinga_user (object_name, zone_id); CREATE INDEX user_zone ON icinga_user (zone_id); CREATE TABLE icinga_user_inheritance ( user_id integer NOT NULL, parent_user_id integer NOT NULL, weight integer DEFAULT NULL, PRIMARY KEY (user_id, parent_user_id), CONSTRAINT icinga_user_inheritance_user FOREIGN KEY (user_id) REFERENCES icinga_user (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_user_inheritance_parent_user FOREIGN KEY (parent_user_id) REFERENCES icinga_user (id) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE UNIQUE INDEX user_inheritance_unique_order ON icinga_user_inheritance (user_id, weight); CREATE INDEX user_inheritance_user ON icinga_user_inheritance (user_id); CREATE INDEX user_inheritance_user_parent ON icinga_user_inheritance (parent_user_id); CREATE TABLE icinga_user_states_set ( user_id integer NOT NULL, property enum_state_name NOT NULL, merge_behaviour enum_set_merge_behaviour NOT NULL DEFAULT 'override', PRIMARY KEY (user_id, property, merge_behaviour), CONSTRAINT icinga_user_filter_state_user FOREIGN KEY (user_id) REFERENCES icinga_user (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE INDEX user_states_set_user ON icinga_user_states_set (user_id); COMMENT ON COLUMN icinga_user_states_set.merge_behaviour IS 'override: = [], extend: += [], blacklist: -= []'; CREATE TABLE icinga_user_types_set ( user_id integer NOT NULL, property enum_type_name NOT NULL, merge_behaviour enum_set_merge_behaviour NOT NULL DEFAULT 'override', PRIMARY KEY (user_id, property, merge_behaviour), CONSTRAINT icinga_user_filter_type_user FOREIGN KEY (user_id) REFERENCES icinga_user (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE INDEX user_types_set_user ON icinga_user_types_set (user_id); COMMENT ON COLUMN icinga_user_types_set.merge_behaviour IS 'override: = [], extend: += [], blacklist: -= []'; CREATE TABLE icinga_user_var ( user_id integer NOT NULL, varname character varying(255) NOT NULL, varvalue text DEFAULT NULL, format enum_property_format NOT NULL DEFAULT 'string', PRIMARY KEY (user_id, varname), CONSTRAINT icinga_user_var_user FOREIGN KEY (user_id) REFERENCES icinga_user (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE INDEX user_var_search_idx ON icinga_user_var (varname); CREATE INDEX user_var_user ON icinga_user_var (user_id); CREATE TABLE icinga_user_field ( user_id integer NOT NULL, datafield_id integer NOT NULL, is_required enum_boolean NOT NULL, PRIMARY KEY (user_id, datafield_id), CONSTRAINT icinga_user_field_user FOREIGN KEY (user_id) REFERENCES icinga_user (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_user_field_datafield FOREIGN KEY (datafield_id) REFERENCES director_datafield (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE UNIQUE INDEX user_field_key ON icinga_user_field (user_id, datafield_id); CREATE INDEX user_field_user ON icinga_user_field (user_id); CREATE INDEX user_field_datafield ON icinga_user_field (datafield_id); COMMENT ON COLUMN icinga_user_field.user_id IS 'Makes only sense for templates'; CREATE TABLE icinga_usergroup ( id serial, object_name character varying(255) NOT NULL, object_type enum_object_type_all NOT NULL, disabled enum_boolean NOT NULL DEFAULT 'n', display_name character varying(255) DEFAULT NULL, PRIMARY KEY (id) ); CREATE UNIQUE INDEX usergroup_search_idx ON icinga_usergroup (display_name); CREATE INDEX usergroup_object_name ON icinga_usergroup (object_name); CREATE TABLE icinga_usergroup_inheritance ( usergroup_id integer NOT NULL, parent_usergroup_id integer NOT NULL, weight integer DEFAULT NULL, PRIMARY KEY (usergroup_id, parent_usergroup_id), CONSTRAINT icinga_usergroup_inheritance_usergroup FOREIGN KEY (usergroup_id) REFERENCES icinga_usergroup (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_usergroup_inheritance_parent_usergroup FOREIGN KEY (parent_usergroup_id) REFERENCES icinga_usergroup (id) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE UNIQUE INDEX usergroup_inheritance_unique_order ON icinga_usergroup_inheritance (usergroup_id, weight); CREATE INDEX usergroup_inheritance_usergroup ON icinga_usergroup_inheritance (usergroup_id); CREATE INDEX usergroup_inheritance_usergroup_parent ON icinga_usergroup_inheritance (parent_usergroup_id); CREATE TABLE icinga_usergroup_user ( usergroup_id integer NOT NULL, user_id integer NOT NULL, PRIMARY KEY (usergroup_id, user_id), CONSTRAINT icinga_usergroup_user_user FOREIGN KEY (user_id) REFERENCES icinga_user (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_usergroup_user_usergroup FOREIGN KEY (usergroup_id) REFERENCES icinga_usergroup (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE INDEX usergroup_user_user ON icinga_usergroup_user (user_id); CREATE INDEX usergroup_user_usergroup ON icinga_usergroup_user (usergroup_id); CREATE TABLE icinga_usergroup_parent ( usergroup_id integer NOT NULL, parent_usergroup_id integer NOT NULL, PRIMARY KEY (usergroup_id, parent_usergroup_id), CONSTRAINT icinga_usergroup_parent_usergroup FOREIGN KEY (usergroup_id) REFERENCES icinga_usergroup (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_usergroup_parent_parent FOREIGN KEY (parent_usergroup_id) REFERENCES icinga_usergroup (id) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE INDEX usergroup_parent_usergroup ON icinga_usergroup_parent (usergroup_id); CREATE INDEX usergroup_parent_parent ON icinga_usergroup_parent (parent_usergroup_id); CREATE TABLE icinga_notification ( id serial, object_name CHARACTER VARYING(255) DEFAULT NULL, object_type enum_object_type_all NOT NULL, disabled enum_boolean NOT NULL DEFAULT 'n', apply_to enum_host_service NULL DEFAULT NULL, host_id integer DEFAULT NULL, service_id integer DEFAULT NULL, times_begin integer DEFAULT NULL, times_end integer DEFAULT NULL, notification_interval integer DEFAULT NULL, command_id integer DEFAULT NULL, period_id integer DEFAULT NULL, zone_id integer DEFAULT NULL, PRIMARY KEY (id), CONSTRAINT icinga_notification_host FOREIGN KEY (host_id) REFERENCES icinga_host (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_notification_service FOREIGN KEY (service_id) REFERENCES icinga_service (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_notification_command FOREIGN KEY (command_id) REFERENCES icinga_command (id) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT icinga_notification_period FOREIGN KEY (period_id) REFERENCES icinga_timeperiod (id) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT icinga_notification_zone FOREIGN KEY (zone_id) REFERENCES icinga_zone (id) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE TABLE icinga_notification_assignment ( id bigserial, notification_id integer NOT NULL, filter_string TEXT NOT NULL, assign_type enum_assign_type NOT NULL DEFAULT 'assign', PRIMARY KEY (id), CONSTRAINT icinga_notification_assignment FOREIGN KEY (notification_id) REFERENCES icinga_notification (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE TABLE icinga_notification_user ( notification_id integer NOT NULL, user_id integer NOT NULL, PRIMARY KEY (notification_id, user_id), CONSTRAINT icinga_notification_user_user FOREIGN KEY (user_id) REFERENCES icinga_user (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_notification_user_notification FOREIGN KEY (notification_id) REFERENCES icinga_notification (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE TABLE icinga_notification_usergroup ( notification_id integer NOT NULL, usergroup_id integer NOT NULL, PRIMARY KEY (notification_id, usergroup_id), CONSTRAINT icinga_notification_usergroup_usergroup FOREIGN KEY (usergroup_id) REFERENCES icinga_usergroup (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_notification_usergroup_notification FOREIGN KEY (notification_id) REFERENCES icinga_notification (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE TABLE import_source ( id serial, source_name character varying(64) NOT NULL, key_column character varying(64) NOT NULL, provider_class character varying(72) NOT NULL, import_state enum_sync_state NOT NULL DEFAULT 'unknown', last_error_message character varying(255) NULL DEFAULT NULL, last_attempt timestamp with time zone NULL DEFAULT NULL, PRIMARY KEY (id) ); CREATE INDEX import_source_search_idx ON import_source (key_column); CREATE TABLE import_source_setting ( source_id integer NOT NULL, setting_name character varying(64) NOT NULL, setting_value text NOT NULL, PRIMARY KEY (source_id, setting_name), CONSTRAINT import_source_settings_source FOREIGN KEY (source_id) REFERENCES import_source (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE INDEX import_source_setting_source ON import_source_setting (source_id); CREATE TABLE import_row_modifier ( id bigserial, source_id integer NOT NULL, property_name character varying(255) NOT NULL, target_property character varying(255) DEFAULT NULL, provider_class character varying(72) NOT NULL, priority integer NOT NULL, PRIMARY KEY (id), CONSTRAINT row_modifier_import_source FOREIGN KEY (source_id) REFERENCES import_source (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE INDEX import_row_modifier_search_idx ON import_row_modifier (property_name); CREATE TABLE import_row_modifier_setting ( row_modifier_id serial, setting_name character varying(64) NOT NULL, setting_value TEXT DEFAULT NULL, PRIMARY KEY (row_modifier_id, setting_name), CONSTRAINT row_modifier_settings FOREIGN KEY (row_modifier_id) REFERENCES import_row_modifier (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE TABLE imported_rowset ( checksum bytea CHECK(LENGTH(checksum) = 20), PRIMARY KEY (checksum) ); CREATE TABLE import_run ( id serial, source_id integer NOT NULL, rowset_checksum bytea CHECK(LENGTH(rowset_checksum) = 20), start_time timestamp with time zone NOT NULL, end_time timestamp with time zone DEFAULT NULL, succeeded enum_boolean DEFAULT NULL, PRIMARY KEY (id), CONSTRAINT import_run_source FOREIGN KEY (source_id) REFERENCES import_source (id) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT import_run_rowset FOREIGN KEY (rowset_checksum) REFERENCES imported_rowset (checksum) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE INDEX import_run_import_source ON import_run (source_id); CREATE INDEX import_run_rowset ON import_run (rowset_checksum); CREATE TABLE imported_row ( checksum bytea CHECK(LENGTH(checksum) = 20), object_name character varying(255) NOT NULL, PRIMARY KEY (checksum) ); COMMENT ON COLUMN imported_row.checksum IS 'sha1(object_name;property_checksum;...)'; CREATE TABLE imported_rowset_row ( rowset_checksum bytea CHECK(LENGTH(rowset_checksum) = 20), row_checksum bytea CHECK(LENGTH(row_checksum) = 20), PRIMARY KEY (rowset_checksum, row_checksum), CONSTRAINT imported_rowset_row_rowset FOREIGN KEY (rowset_checksum) REFERENCES imported_rowset (checksum) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT imported_rowset_row_row FOREIGN KEY (row_checksum) REFERENCES imported_row (checksum) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE INDEX imported_rowset_row_rowset_checksum ON imported_rowset_row (rowset_checksum); CREATE INDEX imported_rowset_row_row_checksum ON imported_rowset_row (row_checksum); CREATE TABLE imported_property ( checksum bytea CHECK(LENGTH(checksum) = 20), property_name character varying(64) NOT NULL, property_value text NOT NULL, format enum_property_format, PRIMARY KEY (checksum) ); CREATE INDEX imported_property_search_idx ON imported_property (property_name); CREATE TABLE imported_row_property ( row_checksum bytea CHECK(LENGTH(row_checksum) = 20), property_checksum bytea CHECK(LENGTH(property_checksum) = 20), PRIMARY KEY (row_checksum, property_checksum), CONSTRAINT imported_row_property_row FOREIGN KEY (row_checksum) REFERENCES imported_row (checksum) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT imported_row_property_property FOREIGN KEY (property_checksum) REFERENCES imported_property (checksum) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE INDEX imported_row_property_row_checksum ON imported_row_property (row_checksum); CREATE INDEX imported_row_property_property_checksum ON imported_row_property (property_checksum); CREATE TABLE sync_rule ( id serial, rule_name character varying(255) NOT NULL, object_type enum_sync_rule_object_type NOT NULL, update_policy enum_sync_rule_update_policy NOT NULL, purge_existing enum_boolean NOT NULL DEFAULT 'n', filter_expression text DEFAULT NULL, sync_state enum_sync_state NOT NULL DEFAULT 'unknown', last_error_message character varying(255) NULL DEFAULT NULL, last_attempt timestamp with time zone NULL DEFAULT NULL, PRIMARY KEY (id) ); CREATE TABLE sync_property ( id serial, rule_id integer NOT NULL, source_id integer NOT NULL, source_expression character varying(255) NOT NULL, destination_field character varying(64), priority smallint NOT NULL, filter_expression text DEFAULT NULL, merge_policy enum_sync_property_merge_policy NOT NULL, PRIMARY KEY (id), CONSTRAINT sync_property_rule FOREIGN KEY (rule_id) REFERENCES sync_rule (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT sync_property_source FOREIGN KEY (source_id) REFERENCES import_source (id) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE INDEX sync_property_rule ON sync_property (rule_id); CREATE INDEX sync_property_source ON sync_property (source_id); CREATE TABLE sync_run ( id bigserial, rule_id integer NOT NULL, rule_name character varying(255) NOT NULL, start_time TIMESTAMP WITH TIME ZONE NOT NULL, duration_ms integer DEFAULT NULL, objects_deleted integer DEFAULT 0, objects_created integer DEFAULT 0, objects_modified integer DEFAULT 0, last_former_activity bytea DEFAULT NULL CHECK(LENGTH(last_former_activity) = 20), last_related_activity bytea DEFAULT NULL CHECK(LENGTH(last_related_activity) = 20), PRIMARY KEY (id), CONSTRAINT sync_run_rule FOREIGN KEY (rule_id) REFERENCES sync_rule (id) ON DELETE SET NULL ON UPDATE CASCADE ); CREATE TABLE icinga_notification_states_set ( notification_id integer NOT NULL, property enum_state_name NOT NULL, merge_behaviour enum_set_merge_behaviour NOT NULL DEFAULT 'override', PRIMARY KEY (notification_id, property, merge_behaviour), CONSTRAINT icinga_notification_states_set_notification FOREIGN KEY (notification_id) REFERENCES icinga_notification (id) ON DELETE CASCADE ON UPDATE CASCADE ); COMMENT ON COLUMN icinga_notification_states_set.merge_behaviour IS 'override: = [], extend: += [], blacklist: -= []'; CREATE TABLE icinga_notification_types_set ( notification_id integer NOT NULL, property enum_type_name NOT NULL, merge_behaviour enum_set_merge_behaviour NOT NULL DEFAULT 'override', PRIMARY KEY (notification_id, property, merge_behaviour), CONSTRAINT icinga_notification_types_set_notification FOREIGN KEY (notification_id) REFERENCES icinga_notification (id) ON DELETE CASCADE ON UPDATE CASCADE ); COMMENT ON COLUMN icinga_notification_types_set.merge_behaviour IS 'override: = [], extend: += [], blacklist: -= []'; CREATE TABLE icinga_notification_var ( notification_id integer NOT NULL, varname VARCHAR(255) NOT NULL, varvalue TEXT DEFAULT NULL, format enum_property_format, PRIMARY KEY (notification_id, varname), CONSTRAINT icinga_notification_var_notification FOREIGN KEY (notification_id) REFERENCES icinga_notification (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE UNIQUE INDEX notification_var_search_idx ON icinga_notification_var (varname); CREATE TABLE icinga_notification_inheritance ( notification_id integer NOT NULL, parent_notification_id integer NOT NULL, weight integer DEFAULT NULL, PRIMARY KEY (notification_id, parent_notification_id), CONSTRAINT icinga_notification_inheritance_notification FOREIGN KEY (notification_id) REFERENCES icinga_notification (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT icinga_notification_inheritance_parent_notification FOREIGN KEY (parent_notification_id) REFERENCES icinga_notification (id) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE UNIQUE INDEX notification_inheritance ON icinga_notification_inheritance (notification_id, weight); INSERT INTO director_schema_migration (schema_version, migration_time) VALUES (103, NOW());