Розширення createTable

🌐 Цей документ доступний українською та англійською мовами. Використовуйте перемикач у правому верхньому куті, щоб змінити версію.

1. Загальний опис

Тег createTable, необхідний для створення таблиць у БД, є стандартним для Liquibase, проте у liquibase-ddm-ext додається обробка параметрів, специфічних для Платформи

2. Liquibase-схема

Зберігається у одній схемі з іншими стандартними тегами Liquibase, у офіційній документації (наразі використовується версія 4.15)

Атрибути, специфічні для liquibase-ddm-ext:

<xsd:attribute name="historyFlag" type="xsd:boolean"/>
<xsd:attribute name="readMode" type="readType" default="sync"/>
<xsd:attribute name="distribution" type="distributionType" default="local"/>
<xsd:attribute name="classify" type="classifyType"/>
<xsd:attribute name="autoGenerate" type="xsd:string"/>
<xsd:attribute name="bulkLoad" type="xsd:boolean"/>

3. Приклад використання

<changeSet id="table pd_processing_consent" author="registry owner">
    <comment>CREATE TABLE pd_processing_consent</comment>
    <ext:createTable tableName="pd_processing_consent" ext:historyFlag="true" ext:bulkLoad="true">
        <column name="consent_id" type="UUID">
            <constraints nullable="false" primaryKey="true" primaryKeyName="pk_pd_processing_consent"/>
        </column>
        <column name="consent_date" type="TIMESTAMPTZ">
            <constraints nullable="false"/>
        </column>
        <column name="person_gender" type="type_gender">
            <constraints nullable="false"/>
        </column>
        <column name="person_full_name" type="TEXT">
            <constraints nullable="false"/>
        </column>
        <column name="person_pass_number" type="TEXT">
            <constraints nullable="false"/>
        </column>
        <column name="auto_generated_number" type="TEXT" ext:autoGenerate="АА-{DDMMYYYY}-{SEQ}">
            <constraints nullable="false" unique="true"/>
        </column>
    </ext:createTable>
</changeSet>

4. Опис параметрів

Параметри для основного тегу

Назва параметру

Можливі значення

Опис

historyFlag

true

створює для вказаної таблиці відповідну історичну з суфіксом _hst, в яку записуються усі зміни у записах таблиці

bulkLoad

true/false

для модифікації API згенерованих сервісів, визначає, чи буде згенерований ендпоінт, що дозволяє транзакційно зберігати декілька сутностей в одному запиті

readMode

sync/async

для модифікації API згенерованих сервісів, визначає,як буде відбуватись операція читання даних, синхронно чи асинхронно (синхронно - на рівні registry-rest_api, асинхронно - шляхом rest-api→ registry-kafka-api → rest-api)

isObject

true/false

визначає таблицю як об’єкт (додається зв’язок з таблицею subject)

Параметри для вкладених тегів column

Назва атрибуту (name)

Можливі значення (value)

Опис

classify

private/confidential

класифікує дані в колонці як персональні

autoGenerate

Патерн для генерації значень у колонці (наприклад, АА-{dd-MM-yyyy}-{SEQ})

для генерації унікальних значень у колонку за вказаним патерном

5. Згенеровані запити до БД

Запити згенеровані для таблиці, наведеної у прикладі

CREATE TABLE registry.pd_processing_consent_hst (consent_id UUID NOT NULL, consent_date TIMESTAMP WITH TIME ZONE NOT NULL, person_gender TYPE_GENDER NOT NULL, person_full_name TEXT NOT NULL, person_pass_number TEXT NOT NULL, auto_generated_number TEXT NOT NULL, ddm_created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL, ddm_created_by TEXT NOT NULL, ddm_dml_op CHAR(1) NOT NULL, ddm_system_id UUID NOT NULL, ddm_application_id UUID NOT NULL, ddm_business_process_id UUID, ddm_business_process_definition_id TEXT, ddm_business_process_instance_id TEXT, ddm_business_activity TEXT, ddm_business_activity_instance_id TEXT, ddm_digital_sign TEXT, ddm_digital_sign_derived TEXT, ddm_digital_sign_checksum TEXT, ddm_digital_sign_derived_checksum TEXT, CONSTRAINT pk_pd_processing_consent PRIMARY KEY (consent_id), CONSTRAINT ui_pd_processing_consent_hst UNIQUE (consent_id, ddm_created_at));

ALTER TABLE registry.pd_processing_consent_hst DROP CONSTRAINT pk_pd_processing_consent;

REVOKE ALL PRIVILEGES ON TABLE pd_processing_consent_hst FROM PUBLIC;

GRANT SELECT ON pd_processing_consent_hst TO application_role;

CREATE TABLE registry.pd_processing_consent (consent_id UUID NOT NULL, consent_date TIMESTAMP WITH TIME ZONE NOT NULL, person_gender TYPE_GENDER NOT NULL, person_full_name TEXT NOT NULL, person_pass_number TEXT NOT NULL, auto_generated_number TEXT NOT NULL, ddm_created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL, ddm_created_by TEXT NOT NULL, ddm_updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL, ddm_updated_by TEXT NOT NULL, CONSTRAINT pk_pd_processing_consent PRIMARY KEY (consent_id), UNIQUE (auto_generated_number));

REVOKE ALL PRIVILEGES ON TABLE pd_processing_consent FROM PUBLIC;

GRANT SELECT ON pd_processing_consent TO application_role;

CREATE SEQUENCE IF NOT EXISTS pd_processing_consent_auto_generated_number_seq INCREMENT BY 1 OWNED BY pd_processing_consent.auto_generated_number;

GRANT USAGE ON SEQUENCE pd_processing_consent_auto_generated_number_seq TO application_role;

insert into ddm_liquibase_metadata(change_type, change_name, attribute_name, attribute_value) values ('autoGenerate', 'pd_processing_consent', 'auto_generated_number', 'АА-{DDMMYYYY}-{SEQ}');

insert into ddm_liquibase_metadata(change_type, change_name, attribute_name, attribute_value) values ('bulkLoad', 'pd_processing_consent', 'bulkLoad', 'true');

INSERT INTO public.ddm_db_changelog (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, DESCRIPTION, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('table pd_processing_consent', 'registry owner', 'main-liquibase.xml', NOW(), 55, '8:1d833a79f2d827609a61ac1df5354bd4', 'createTable tableName=pd_processing_consent', 'CREATE TABLE pd_processing_consent', 'EXECUTED', NULL, NULL, '4.5.0', '7604867906');