· 4 years ago · Aug 20, 2021, 11:50 AM
1create table if not exists detached_task_payload
2(
3 id varchar not null,
4 task_topic varchar not null,
5 task_partition integer not null,
6 task_offset integer not null,
7 state task_state_type default 'ACQUIRED'::task_state_type not null,
8 server_id integer not null,
9 acquired_ts timestamp,
10 task_type varchar not null,
11 task_payload jsonb
12) PARTITION BY LIST (task_type); /* делим основную таблицу по типу задачи */
13
14comment on table detached_task_payload is 'сущность для хранения контекста задачи';
15
16comment on column detached_task_payload.state is 'статус задачи';
17
18comment on column detached_task_payload.server_id is 'SERVER-ID воркера захватившего задачу на себя';
19
20comment on column detached_task_payload.task_type is 'тип задачи';
21
22alter table detached_task_payload
23 owner to postgres;
24
25-- дальнейшие скрипты для разбивки таблицы на partition по task_type, затем по state
26
27-- для типа PHD_QUERY_TASK_PAYLOAD
28CREATE TABLE phd_task_payload PARTITION of detached_task_payload FOR VALUES IN
29 ('PHD_QUERY_TASK_PAYLOAD') PARTITION BY LIST (state);
30
31-- для типа START_BPMN_PROCESS_TASK
32CREATE TABLE bpmn_task_payload PARTITION of detached_task_payload FOR VALUES IN
33 ('START_BPMN_PROCESS_TASK') PARTITION BY LIST (state);
34
35-- DEFAULT для всех оставшихся типов
36CREATE TABLE task_payload_default PARTITION of detached_task_payload DEFAULT;
37
38-- для типа PHD_QUERY_TASK_PAYLOAD со статусом DONE
39CREATE TABLE phd_task_payload_done PARTITION of phd_task_payload FOR VALUES IN
40 ('DONE');
41
42-- для типа START_BPMN_PROCESS_TASK со статусом DONE
43CREATE TABLE bpmn_task_payload_done PARTITION of bpmn_task_payload FOR VALUES IN
44 ('DONE');
45
46-- для типа PHD_QUERY_TASK_PAYLOAD с любым другим статусом
47CREATE TABLE phd_task_payload_other PARTITION of phd_task_payload DEFAULT;
48-- для типа START_BPMN_PROCESS_TASK с любым другим статусом
49CREATE TABLE bpmn_task_payload_other PARTITION of bpmn_task_payload DEFAULT;