Схема базы данных
START TRANSACTION;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM pg_namespace WHERE nspname = 'preset') THEN
CREATE SCHEMA preset;
END IF;
END $EF$;
CREATE EXTENSION IF NOT EXISTS pg_trgm;
CREATE TABLE preset.presets (
id integer GENERATED BY DEFAULT AS IDENTITY,
title character varying(256) NOT NULL,
mrf_ids integer[] NOT NULL DEFAULT ARRAY[]::integer[],
rf_ids integer[] NOT NULL DEFAULT ARRAY[]::integer[],
description character varying(1024) NULL,
created_at timestamp without time zone NOT NULL,
changed_at timestamp without time zone NOT NULL,
status_type character varying(32) NOT NULL,
sip jsonb NOT NULL,
ntp jsonb NOT NULL,
syslog jsonb NOT NULL,
rooms jsonb NOT NULL DEFAULT '[]',
video_config jsonb NOT NULL,
dtmf jsonb NOT NULL DEFAULT '[]',
CONSTRAINT pk_presets PRIMARY KEY (id)
);
COMMENT ON TABLE preset.presets IS 'Пресет. Пресет с id=1 является дефолтным пресетом. # Описание модели';
COMMENT ON COLUMN preset.presets.id IS 'Идентификатор. # Диапазон: 0..2147483647';
COMMENT ON COLUMN preset.presets.title IS 'Наименование. # Диапазон: 3..256';
COMMENT ON COLUMN preset.presets.mrf_ids IS 'Идентификатор МРФ. # Диапазон: 0..10';
COMMENT ON COLUMN preset.presets.rf_ids IS 'Идентификатор РФ. # Диапазон: 0..100';
COMMENT ON COLUMN preset.presets.description IS 'Описание. # Диапазон: 3..1024';
COMMENT ON COLUMN preset.presets.created_at IS 'Дата и время создания. # Тип: DateTime';
COMMENT ON COLUMN preset.presets.changed_at IS 'Дата последнего изменения. Заполняется и обновляется сервером. Заполняется при создании и изменении. Является версией объекта. # Тип: DateTime';
COMMENT ON COLUMN preset.presets.status_type IS 'Статус';
COMMENT ON COLUMN preset.presets.sip IS 'Параметр SIP';
COMMENT ON COLUMN preset.presets.ntp IS 'Параметр NTP';
COMMENT ON COLUMN preset.presets.syslog IS 'Параметр Syslog';
COMMENT ON COLUMN preset.presets.rooms IS 'Помещения. # Диапазон: 0..10000';
COMMENT ON COLUMN preset.presets.video_config IS 'Параметры конфигурации видео';
COMMENT ON COLUMN preset.presets.dtmf IS 'Параметр DTMF. # Диапазон: 0..64';
CREATE INDEX ix_presets_changed_at ON preset.presets USING btree (changed_at DESC);
CREATE INDEX ix_presets_created_at ON preset.presets USING btree (created_at DESC);
CREATE INDEX ix_presets_dtmf ON preset.presets USING gin (dtmf jsonb_ops);
CREATE INDEX ix_presets_id ON preset.presets USING btree (id DESC);
CREATE INDEX ix_presets_mrf_ids ON preset.presets (mrf_ids);
CREATE INDEX ix_presets_ntp ON preset.presets USING gin (ntp jsonb_path_ops);
CREATE INDEX ix_presets_rf_ids ON preset.presets (rf_ids);
CREATE INDEX ix_presets_rooms ON preset.presets USING gin (rooms jsonb_ops);
CREATE INDEX ix_presets_sip ON preset.presets USING gin (sip jsonb_path_ops);
CREATE INDEX ix_presets_status_type ON preset.presets (status_type DESC);
CREATE INDEX ix_presets_syslog ON preset.presets USING gin (syslog jsonb_path_ops);
CREATE INDEX ix_presets_title ON preset.presets (title DESC);
CREATE INDEX ix_presets_title_description ON preset.presets USING gin (to_tsvector('russian', title || ' ' || coalesce(description, '')));
CREATE INDEX ix_presets_video_config ON preset.presets USING gin (video_config jsonb_path_ops);
COMMIT;