Управление VIEW в Liquibase.md
This commit is contained in:
parent
deea8586ba
commit
756ef88701
83
dev/database/Управление VIEW в Liquibase.md
Normal file
83
dev/database/Управление VIEW в Liquibase.md
Normal file
@ -0,0 +1,83 @@
|
||||
---
|
||||
aliases:
|
||||
tags:
|
||||
- maturity/🌱
|
||||
date: "[[2023-11-02]]"
|
||||
zero-link:
|
||||
parents:
|
||||
linked:
|
||||
---
|
||||
## Проблема
|
||||
==При создании VIEW в Liquibase возникают проблемы с её поддержкой, поскольку она часто изменяется, особенно когда меняется исходная таблица, используемая вьюхой.== Проблемы усложняются, если к одной таблице привязано несколько вьюх.
|
||||
|
||||
После нескольких изменений становится сложно находить актуальный скрипт создания VIEW для его обновления, так как изменения могут быть разбросаны по нескольким файлам или версиям. Например, изменения в логике могут быть внесены в один файл, а изменения в структуре — в другой, что затрудняет сборку актуальной версии скрипта.
|
||||
## Решение
|
||||
Для решения этой проблемы все VIEW выносятся в отдельный changeLog файл. Этот changeLog файл всегда указывается в конце master changeLog, так как вьюхи создаются после создания всех необходимых таблиц и данных в базе, чтобы обеспечить их корректность.
|
||||
|
||||
Пример master changeLog файла:
|
||||
|
||||
```xml
|
||||
<?xml version="1.1" encoding="UTF-8"?>
|
||||
<databaseChangeLog
|
||||
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
|
||||
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
|
||||
|
||||
<include file="v.1.0.0/changelog.xml" relativeToChangelogFile="true"/>
|
||||
|
||||
<!-- VIEWS -->
|
||||
<include file="views/changelog.xml" relativeToChangelogFile="true"/>
|
||||
|
||||
</databaseChangeLog>
|
||||
```
|
||||
|
||||
В changeLog файле для создания вьюх необходимо придерживаться следующего порядка:
|
||||
- Сначала идет changeSet, который удаляет вьюху, если она уже существует.
|
||||
- Затем идет changeSet, который создает новую вьюху.
|
||||
|
||||
Важным здесь является указывание следующий параметров changeSet-а:
|
||||
- `runAlways="true"` — указывает Liquibase всегда выполнять этот changeSet, даже если он был уже выполнен ранее. Это особенно полезно, когда необходимо поддерживать актуальность данных вьюхи после каждого изменения.
|
||||
- `runOnChange="true"` — указывает Liquibase игнорировать несовпадение контрольной суммы данного changeSet-а. Это важно, когда вносятся изменения в структуру вьюхи, и необходимо обновить её без возникновения ошибок из-за изменения контрольной суммы.
|
||||
|
||||
Пример changeSet-ов.
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<databaseChangeLog
|
||||
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd
|
||||
http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
|
||||
|
||||
<changeSet id="drop-view" author="uPagge" runAlways="true" runOnChange="true">
|
||||
<preConditions onFail="CONTINUE">
|
||||
<viewExists viewName="view_name"/>
|
||||
</preConditions>
|
||||
<dropView viewName="view_name"/>
|
||||
</changeSet>
|
||||
<changeSet id="create-view" author="uPagge" runAlways="true" runOnChange="true">
|
||||
<preConditions onFail="CONTINUE">
|
||||
<not>
|
||||
<viewExists viewName="view_name"/>
|
||||
</not>
|
||||
</preConditions>
|
||||
<createView viewName="view_name">
|
||||
...SQL FOR CREATE VIEW...
|
||||
</createView>
|
||||
</changeSet>
|
||||
</databaseChangeLog>
|
||||
```
|
||||
|
||||
Таким образом, у нас появляется единое место, которое содержит актуальные структуры наших VIEW.
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Базы Данных|00 Базы Данных]]
|
||||
**Родитель**:: [[Liquibase]]
|
||||
**Источник**::
|
||||
**Автор**::
|
||||
**Создана**:: [[2024-11-02]]
|
||||
### Дополнительные материалы
|
||||
-
|
||||
### Дочерние заметки
|
||||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
Loading…
Reference in New Issue
Block a user