Пример использования Qbim для тестового объекта
Установка расширения
CREATE EXTENSION qbim CASCADE;
Создание тестового объекта
CREATE TABLE test (
id BIGSERIAL NOT NULL,
sd TIMESTAMP NOT NULL DEFAULT current_timestamp,
ed TIMESTAMP NOT NULL DEFAULT 'infinity'::TIMESTAMP WITHOUT TIME ZONE,
name TEXT NOT NULL,
state BIGINT NOT NULL,
val BIGINT NOT NULL,
dsc TEXT NOT NULL,
CONSTRAINT cls_id_sd_ed_excl exclude USING gist (id WITH =, tsrange(sd, ed) WITH &&) WHERE ((sd <> ed))
);
CREATE INDEX test_id_sd_ed_excl ON test USING gist (id, tsrange(sd, ed)) WHERE (sd <> ed);
Описание в таблицах описания объектов
INSERT INTO obj (tab,dsc,parent,is_temporal,is_logging,is_global) VALUES
('test','Тестовый объект',NULL,true,true,false);
INSERT INTO obj_item (up,ord,"name",r_cls,r_obj,"option",dsc) VALUES
(1,1,'id',NULL,NULL,NULL,'идентификатор'),
(1,2,'sd',NULL,NULL,NULL,'время начала действия версии'),
(1,3,'ed',NULL,NULL,NULL,'время окончания действия версии'),
(1,4,'name',NULL,NULL,NULL,'название'),
(1,5,'state',NULL,NULL,NULL,'состояние объекта'),
(1,6,'val',NULL,NULL,NULL,'значение'),
(1,7,'dsc',NULL,NULL,NULL,'комментарий');
Создание реализации объекта
Примечание
Здесь и далее при вызове интерфейсных методов указывается случайный идентификатор пользователя '463404e8-ee5d-4597-b9a9-e3b69e29d18a'::uuid, который используется при регистрации действия.
SELECT qbim_create(1::bigint,null::text,null::bigint,
'-infinity'::timestamp,null::timestamp,
'463404e8-ee5d-4597-b9a9-e3b69e29d18a'::uuid,
'name','Test record'::text,
'state',1::bigint,
'val',5::bigint
);
Изменение объекта — создание версий
SELECT qbim_change(1::bigint,null::text,1::bigint,
'2021-03-30 13:35:30.0'::timestamp,null::timestamp,
'463404e8-ee5d-4597-b9a9-e3b69e29d18a'::uuid,
'state',2::bigint
);
SELECT qbim_change(1::bigint,null::text,1::bigint,
'2021-03-30 13:36:30.0'::timestamp,null::timestamp,
'463404e8-ee5d-4597-b9a9-e3b69e29d18a'::uuid,
'state',3::bigint
);
SELECT qbim_change(1::bigint,null::text,1::bigint,
'2021-03-30 13:35:30.0'::timestamp,'2021-03-30 13:36:00.0'::timestamp,
'463404e8-ee5d-4597-b9a9-e3b69e29d18a'::uuid,
'val',6::bigint
);
SELECT qbim_change(1::bigint,null::text,1::bigint,
'2021-03-30 13:35:20.0'::timestamp,'2021-03-30 13:36:15.0'::timestamp,
'463404e8-ee5d-4597-b9a9-e3b69e29d18a'::uuid,
'val',7::bigint
);
SELECT qbim_change(1::bigint,null::text,1::bigint,
'2021-03-30 13:36:00.0'::timestamp,null::timestamp,
'463404e8-ee5d-4597-b9a9-e3b69e29d18a'::uuid,
'val',9::bigint
);
SELECT qbim_change(1::bigint,null::text,1::bigint,
'2021-03-30 13:35:20.0'::timestamp,'2021-03-30 13:36:15.0'::timestamp,
'463404e8-ee5d-4597-b9a9-e3b69e29d18a'::uuid,
'val',10::bigint,
'state', 6::bigint
);
SELECT qbim_change(1::bigint,null::text,1::bigint,
'2021-03-30 13:35:20.0'::timestamp,'2021-03-30 13:36:30.0'::timestamp,
'463404e8-ee5d-4597-b9a9-e3b69e29d18a'::uuid,
'val',11::bigint,
'state', 7::bigint
);
Выборка, просмотр версий
Можно запускать на разных этапах изменения объекта.
Запрос версии «на момент времени»
SELECT * FROM test
WHERE '2021-03-30 13:35:45.0'::timestamp <@ tsrange(sd,ed)
ORDER BY id, sd, ed;
Запрос всех версий, кроме «схлопнувшихся»
SELECT * FROM test WHERE sd<>ed
ORDER BY id, sd, ed;
Запрос всех версий
SELECT * FROM test
ORDER BY id, sd, ed;
Закрытие версии
SELECT qbim_close(1::bigint,null::text,1::bigint,
'2021-03-30 13:35:15.0'::timestamp,
'463404e8-ee5d-4597-b9a9-e3b69e29d18a'::uuid
);
Регистрация действий
SELECT
r_object, lnk_dt, fct_dt, action, pid, userid
FROM action;
r_object | lnk_dt | fct_dt | action | pid | userid |
---|---|---|---|---|---|
1:1 | -infinity | 2021-05-05 11:47:43.957595 | 1 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | -infinity | 2021-05-05 11:48:08.117459 | 3 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | 2021-03-30 13:35:30 | 2021-05-05 11:48:08.117649 | 2 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | 2021-03-30 13:35:30 | 2021-05-05 11:48:09.595363 | 3 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | 2021-03-30 13:36:30 | 2021-05-05 11:48:09.596457 | 2 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | -infinity | 2021-05-05 11:48:10.988799 | 3 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | 2021-03-30 13:35:30 | 2021-05-05 11:48:10.989053 | 3 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | 2021-03-30 13:35:30 | 2021-05-05 11:48:10.989264 | 2 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | -infinity | 2021-05-05 11:48:12.515611 | 3 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | 2021-03-30 13:35:30 | 2021-05-05 11:48:12.516679 | 3 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | 2021-03-30 13:36:00 | 2021-05-05 11:48:12.517692 | 3 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | 2021-03-30 13:35:20 | 2021-05-05 11:48:12.518829 | 2 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | 2021-03-30 13:35:30 | 2021-05-05 11:48:12.519755 | 2 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | 2021-03-30 13:35:30 | 2021-05-05 11:48:15.094103 | 3 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | 2021-03-30 13:36:15 | 2021-05-05 11:48:15.094302 | 3 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | 2021-03-30 13:36:30 | 2021-05-05 11:48:15.094489 | 3 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | 2021-03-30 13:36:00 | 2021-05-05 11:48:15.094663 | 2 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | 2021-03-30 13:36:30 | 2021-05-05 11:48:15.094829 | 2 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | -infinity | 2021-05-05 11:48:17.110891 | 3 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | 2021-03-30 13:35:20 | 2021-05-05 11:48:17.111094 | 3 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | 2021-03-30 13:35:30 | 2021-05-05 11:48:17.111286 | 3 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | 2021-03-30 13:36:00 | 2021-05-05 11:48:17.111476 | 3 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | 2021-03-30 13:35:20 | 2021-05-05 11:48:17.111692 | 2 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | -infinity | 2021-05-05 11:48:19.36584 | 3 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | 2021-03-30 13:35:20 | 2021-05-05 11:48:19.366077 | 3 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | 2021-03-30 13:36:15 | 2021-05-05 11:48:19.366265 | 3 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | 2021-03-30 13:35:20 | 2021-05-05 11:48:19.366443 | 2 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
1:1 | 2021-03-30 13:35:15 | 2021-05-05 11:51:57.079878 | 4 | 2522 | 463404e8-ee5d-4597-b9a9-e3b69e29d18a |
Значения полей описаны в разделе Описание версионируемых таблиц.
Примечание
Поля fct_dt и pid могут отличаться; в данной таблице они приведены как пример.