- Минимизация рисков нестабильности работы БД в процессе накатывания миграций БД в производственной среде
- Поддержание заданного уровня качества БД
Валидатор представляет из себя функцию в БД PostgreSQL 12+.
Запуск:
select db_validate_v2(
--'{has_pk_uk,has_not_redundant_index,has_index_for_fk}', --some checks
null, --all checks
null, --schemas_ignore_regexp
'{unused,migration,test}', --schemas_ignore
'(?<![a-z\d])(te?mp|test|unused|backups?|deleted)(?![a-z\d])', --tables_ignore_regexp
null --tables_ignore
);Функция проверяет текущую БД на наличие проблем. Никаких данных не возвращается. Если проблемы не найдены, функция успешно завершает работу, иначе возвращается ошибка (исключение в терминах PL/PgSQL): текст ошибки и рекомендации по исправлению.
Рекомендуется вызвать функцию в одной транзакции до и после накатывания миграции на тестовой БД. Если до применения миграции ошибок нет, а после есть, значит причина в миграции БД.
| № | В какой версии сделано | Код проверки | Название проверки | Назначение (обоснование) проверки |
|---|---|---|---|---|
| 1 | v1 | has_pk_uk |
Наличие первичного или уникального индекса в таблице |
Первичный индекс (PK) позволяет
Уникальный индекс (UK) позволяет исключить дубликаты Без PK или UK невозможно сделать логическую репликацию. |
| 2 | v1 | has_not_redundant_index |
Отсутствие избыточных индексов в таблице |
Если есть составной индекс на поля col1 и col2 (именно в такой последовательности), то отдельный индекс на поле col1 не нужен, он избыточный. Лишние индексы занимают место на диске и замедляют DML запросы. |
| 3 | v2 | has_index_for_fk |
Наличие индексов для ограничений внешних ключей в таблице |
Без индексов на ограничения внешних ключей (FK) могут работать медленно элементарные запросы типа DELETE FROM {table} WHERE id=<id> из-за ссылающихся на {table} таблиц по FK без индекса. |
| 4 | v2 | has_table_comment |
Наличие описания для таблицы | На этапе проектирования описание помогает лучше понять назначение таблицы и на сколько удачно она названа исходя из описания.
В дальнейшем тандем названия и описания упрощают понимание и поддержку кода. Порог входа для новых IT специалистов (разработчиков, тестировщиков, бизнес- и системных аналитиков) уменьшается.
Проверка на наличие непустого значения в COMMENT ON TABLE {table}
|
| 5 | v2 | has_column_comment |
Наличие описания для колонки | На этапе проектирования описание помогает лучше понять назначение колонки и на сколько удачно она названа исходя из описания.
В дальнейшем тандем названия и описания упрощают понимание и поддержку кода. Порог входа для новых IT специалистов (разработчиков, тестировщиков, бизнес- и системных аналитиков) уменьшается.
Проверка на наличие непустого значения в COMMENT ON TABLE {table}.{column}
|