Перейти к содержанию

Схема базы данных

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;